C# 中 public new 与 new public ,这是什么作用?有什么差别?

2019-01-03 02:31发布

 1 //定义属性、方法
 2 public new HttpResponse Response
 3 {
 4 get { return System.Web.HttpContext.Current.Response; }
 5 }
 6 
 7 public new void Method2()
 8 {
 9     Console.WriteLine("Derived - Method2");
10 }
11 
12 //定义字段、方法
13 
14 new public void Invoke() { }
15 new public static int x = 100;

如此,两种语法有何差别、又有何用法?

相关讲解:

http://msdn.microsoft.com/zh-cn/library/ms173153.aspx

http://msdn.microsoft.com/zh-cn/library/435f1dw2.aspx

仍是不太理解,以前面的C#代码,谁能解答一下

标签: 语法
2条回答
等我变得足够好
2楼-- · 2019-01-03 03:27

new关键字在C#中有三种用法,这是new修饰符,主要是出现在继承类和实现接口的场景中。
public new和new public只是顺序不一样,本质一样的(C#编译器编译后的IL代码是一样的)
《C# 6.0本质论》P207中用的是public new,MSDN网页也多次用到public new,但在专门介绍new修饰符时统一用的是new public,《C# Language Specification Version 5.0》中统一用的是new public,《CLR via C#第4版》P263中用的是new public
internal class Base : IDisposable
{
public void Dispose()
{
Console.WriteLine("Base's Dispose");
}
}
internal class Derived: Base, IDisposable
{
public new void Dispose()
{
Console.WriteLine("Derived's Dispose");
}
}
其中public new void Dispose()或者new public void Dispose()编译后的IL代码都是.method public final hidebysig newslot virtual instance void Dispose () cil managed
我个人偏好用public new,因为C#代码和IL代码基本上都是以访问修饰符打头的

查看更多
Anthone
3楼-- · 2019-01-03 03:35

变量上的 和方法上的 表示是相对于 继承来说的 

打个比喻 有2个 类

parent(父类)

child (子类)

2个类都有一个同名变量

param 

如果 父类的param变量和 子类的param变量不是同一个 那么 子类在申明的时候 就需要在前面加new 表示这个变量 不是父类的 

 

而在变量上 new要写在前面

方法上 new卸载public 后面 

 

然后至于用到的地方 是配合 类的多态用的 

例如 

Parent parent = new Parent();

Parent parent2 = new Chlid();

Child child = new Child();

这3个类 同时嗲用 param 的时候 用new和不用new 会出现区别

parent.param

parent2.paran

child.param

 

 

查看更多
登录 后发表回答