C#中new的用法及与override的区别分析
2017-05-21 14:45
696 查看
C#中new的用法有三种:
(1)new是运算符,用于创建对象和调用构造函数。如Class1=new Class1();也可以为值类型调用默认的构造函数如int a=new int();此时a=0.
(2)new是修饰符,用于隐藏基类成员的继承成员。override不能隐藏积累成员的继承成员。如:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace A { class Program { abstract public class Test { public virtual void Prinf() { Console.WriteLine("Abstract Printf..."); } } public class Class1 : Test { public override void Prinf() { Console.WriteLine("Class One Override Printf..."); } } public class Class2 : Test { public new void Prinf() { Console.WriteLine("Class Two New Printf..."); } } static void Main(string[] args) { Class1 cls1 = new Class1(); Class2 cls2 = new Class2(); cls1.Prinf(); cls2.Prinf(); ((Test)cls1).Prinf(); ((Test)cls2).Prinf(); Console.ReadLine(); } } }
运行结果表明:new修饰符隐藏了重写方法,通过将派生对象转为为基类对象,调用了基类的方法。而override则是完全重写了方法,即便是转为基类对象也调用的也是派生类的重写方法。
即:new隐藏的基类方法,override重写基类方法。
(3)new是约束。用在泛型中添加类型的约束。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace A { class Test<T> where T : new()//定义类型T的约束,表示T类型必须有不带参数的构造函数 { public T GetItem() { return new T();//如果不添加new()约束,编译错误:变量类型“T”没有 new() 约束,因此无法创建该类型的实例 //想一下,T类型不知道,编译器不知道分配多大的空间,所以会通过反射技术实现 } } class TClass { private int a; public TClass() //如果不添加无参构造函数,编译错误:TClass必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“A.Test<T>”中的参数“T” { } public TClass(int a) { this.a = a; } } class Program { static void Main(string[] args) { Test<TClass> test = new Test<TClass>(); Console.ReadLine(); } } }
注释:参考http://msdn.microsoft.com/zh-cn/library/sd2w2ew5.aspx
您可能感兴趣的文章:
相关文章推荐
- Java 重写(即覆盖Override)与重载(Overload)与多态几个概念的区别分析
- JavaScript中click和onclick本质区别与用法分析
- Java overload和override的区别分析
- C#中new和override区别
- C# new和override的区别分析
- JS引用传递与值传递的区别与用法分析
- c# 的继承,继承类实例化的时候,会先调用基类的构造函数,然后再调用自己的构造函数,base 的用法,有override和没有override的区别
- Class.getResource和ClassLoader.getResource的区别分析及用法
- C#中new和override区别
- C#的static,interface,virtual,abstract,override的区别用法
- PHP中exec与system用法区别分析
- C#中StringBuilder用法以及和String的区别分析
- new、override、virtual用法区别
- sfdisk和parted用法 结合i节点和数据块分析linux中软链接和硬链接的区别 扩充swap
- jquery中事件委派代码分析以及jQuery中delegate和on的用法与区别详细解析
- C#中new的用法,及与override的区别
- ln 命令用法 hard link 与 symbolic link 区别 分析
- C#中new和override区别
- C语言中char*和char[]用法区别分析
- php中静态类与静态变量用法的区别分析