Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS2015关于虚拟方法和事件命名的警告(如果打算隐藏,请使用new关键字) 大家好_C#_Visual Studio_Visual Studio 2015 - Fatal编程技术网

C# VS2015关于虚拟方法和事件命名的警告(如果打算隐藏,请使用new关键字) 大家好

C# VS2015关于虚拟方法和事件命名的警告(如果打算隐藏,请使用new关键字) 大家好,c#,visual-studio,visual-studio-2015,C#,Visual Studio,Visual Studio 2015,我有一些代码如下所示: public class Child : Parent { public event Action<string> OnEventTriggered; } public class Parent { protected virtual void OnEventTriggered( double x ) { } } 因为名称是相同的。由于未添加任何重写或新关键字,编译器假定您不知道基类属性/方法,并向您发出警告 如果要重写基类属性/方法,请

我有一些代码如下所示:

public class Child : Parent
{
    public event Action<string> OnEventTriggered;
}

public class Parent
{
    protected virtual void OnEventTriggered( double x ) { }
}

因为名称是相同的。由于未添加任何重写或新关键字,编译器假定您不知道基类属性/方法,并向您发出警告

  • 如果要重写基类属性/方法,请使用重写。为此,类型和名称必须匹配。可以从基类调用此属性/方法
  • 如果要创建全新的属性/方法,请使用new。无法从基类调用此新属性/方法
更改派生类中事件的名称,则不会违反规则

通常,事件以以下方式实现,均在同一类中:

public class EventDemo {
    public event EventHandler SomeEvent;

    protected virtual void OnSomeEvent() {
        var someEvent = SomeEvent;
        if (someEvent != null) {
            someEvent(this, EventArgs.Empty);
        }
    }
}

因为名称是相同的。由于未添加任何重写或新关键字,编译器假定您不知道基类属性/方法,并向您发出警告

  • 如果要重写基类属性/方法,请使用重写。为此,类型和名称必须匹配。可以从基类调用此属性/方法
  • 如果要创建全新的属性/方法,请使用new。无法从基类调用此新属性/方法
更改派生类中事件的名称,则不会违反规则

通常,事件以以下方式实现,均在同一类中:

public class EventDemo {
    public event EventHandler SomeEvent;

    protected virtual void OnSomeEvent() {
        var someEvent = SomeEvent;
        if (someEvent != null) {
            someEvent(this, EventArgs.Empty);
        }
    }
}

可能重复的可能重复的感谢您的回答。在我的问题中,操作的类型是字符串,虚方法有双输入。这些类型不匹配。编译器还会认为它们是一样的吗?虽然对不同的事物使用相同的名称是一种非常糟糕的做法,但从技术上来说,禁止使用它似乎是不合理的。也就是说,在同一个类中,不能有同名的属性和方法。我唯一的猜测是汇编程序在其他语言中的可移植性,比如VB,语法会在哪里中断。@MarioVernari谁说它是被禁止的,或者说它在哪里被禁止?@Maarten自己试试:不会编译!这是因为我想知道为什么会有类似的限制。不过,对命名匹配的警告是一件非常好的事情。谢谢您的回答。在我的问题中,操作的类型是字符串,虚方法有双输入。这些类型不匹配。编译器还会认为它们是一样的吗?虽然对不同的事物使用相同的名称是一种非常糟糕的做法,但从技术上来说,禁止使用它似乎是不合理的。也就是说,在同一个类中,不能有同名的属性和方法。我唯一的猜测是汇编程序在其他语言中的可移植性,比如VB,语法会在哪里中断。@MarioVernari谁说它是被禁止的,或者说它在哪里被禁止?@Maarten自己试试:不会编译!这是因为我想知道为什么会有类似的限制。不过,命名匹配的警告是一件非常好的事情。