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#代码,谁能解答一下
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代码基本上都是以访问修饰符打头的
变量上的 和方法上的 表示是相对于 继承来说的
打个比喻 有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