首页新闻找找看学习计划

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

0
[已解决问题] 解决于 2018-03-29 08:15
 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#代码,谁能解答一下

Cornelius的主页 Cornelius | 初学一级 | 园豆:80
提问于:2014-10-24 19:03
< >
分享
最佳答案
0

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

打个比喻 有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

 

 

奖励园豆:5
小眼睛老鼠 | 老鸟四级 |园豆:2774 | 2014-10-26 22:58

变量上 new写在public前面

方法上 new写在public 后面 ??

依你意思 new public void Invoke() { } 这么写会有语法错误?

“方法上 new写在public 后面 ” 作用是什么?,我之前没见过在方法前使用 new所以奇怪,怎么看你说的都是C#基础。

Cornelius | 园豆:80 (初学一级) | 2014-10-27 14:44

@Cornelius: 

不是错不错的问题

new是相对于 继承 来说的

如果子类有何父类一样的方法 一般是要使用 override关键字的

代表子类 要覆盖父类的方法

相反 子类如果用new的意思是 子类有一个 和父类一样的同命方法 但是这个方法 和父类不一样

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-10-27 16:02
其他回答(1)
0

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代码基本上都是以访问修饰符打头的

ShawLocke | 园豆:202 (菜鸟二级) | 2018-10-14 18:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册