Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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#方法的返回类型中有什么作用?_C#_Syntax - Fatal编程技术网

新关键字在C#方法的返回类型中有什么作用?

新关键字在C#方法的返回类型中有什么作用?,c#,syntax,C#,Syntax,我无意中写下了这个方法: public static new iTextSharp.text.Color ITextFocusColor() { return new iTextSharp.text.Color(234, 184, 24); } 它的工作原理是可疑的,但我非常惊讶的是,它被允许在方法的返回类型中使用new关键字。如果我把它们放在新的或不放在新的位置上,会有什么影响/区别吗?或者新的是用来做什么的 这在其他OO语言中也可能吗?它不影响返回类型,它表明此方法对基类隐藏方法(而

我无意中写下了这个方法:

public static new iTextSharp.text.Color ITextFocusColor()
{
   return new iTextSharp.text.Color(234, 184, 24);
}
它的工作原理是可疑的,但我非常惊讶的是,它被允许在方法的返回类型中使用new关键字。如果我把它们放在新的或不放在新的位置上,会有什么影响/区别吗?或者新的是用来做什么的


这在其他OO语言中也可能吗?

它不影响返回类型,它表明此方法对基类隐藏方法(而不是重写它)。例如,如果您需要更改基类中声明的返回类型,但隐藏方法不会参与多态性,也就是说,如果您通过基类的变量对派生类的实例调用
ITextFocusColor
,则会调用基类实现(不是用
new
声明的)


有关更多详细信息,请参见。

关键字指定您有意提供基类已提供的方法或属性的新实现。它使基类成员的隐藏成为有意的、自我记录的行为

如果您的基类没有该方法,那么它实际上并不重要


有关更多详细信息,请参见(特别是第3.7.1.2节通过继承隐藏).

它是。它从基类中隐藏成员,而不是重写。

这里方法返回类型中的new
关键字隐藏父方法。

因此静态方法不能重写,但它们可以阴影。有趣的是,我在回答时没有注意到该方法是静态的……这使得关于多态性的部分与本例;)不是替代替代。覆盖也是显式的。它故意隐藏该成员,以避免可能引发的编译器错误。关键字不是方法返回类型的一部分。它不影响方法返回的内容。