C#中new关键字很熟悉吧,某种意义上是用得最多的关键,我们常用的是创建一个新的对象实例。其实它还有两种用法,一是可以作为New关键字修饰,二是New可以作为泛型中的约束来使用,下面我们来看看三种的具体使用。.
一、NEW关键字作为运算符
new运算符创建类型的新实例,就是通常我们调用一个类、创建一个数组、匿名类型实例化等。如下:
//new一个配置类var configuration = new ConfigurationBuilder();//创建一个字典var dict = new Dictionary<string, int>();dict["first"] = 10;//创建数组var numbers = new int[3];numbers[0] = 10;//匿名类型实例化var example = new { Greeting = "Hello", Name = "World" };
二、NEW关键字作为修饰符
在作为修饰符时,New关键字可以显示隐藏在基类继承的成员,也就是在实现多态时,子类添加上new关键字时,再用父类实例化不会调用子类。如下例子:
//新建父类class people{public string name { get; set; }public virtual void say(){Console.WriteLine("hello people");}}//男人class man : people{public override void say(){Console.WriteLine("hello man");}}//女人class woman : people{//这个方法被显示隐藏了public new void say(){Console.WriteLine("hello woman");}}static void Main(string[] args){//这里不影响调用woman w = new woman();w.name = "小花";w.say();//这里隐藏了子类,会调用父类people p = new woman();p.name = "小花";p.say();//这里优先调用子类 如果找不到重写会调用父类people p2 = new man();p2.name = "小王";p2.say();}
打印结果如下:

三、NEW关键字作为泛型中约束
约束 new 指定泛型类或方法声明中的类型参数必须具有公共无参数构造函数。若要使用 new 约束,则该类型不能为抽象类型。如下实例
//新建一个类public class People{private string name;private int id;public People(){name = "张山";id = 0;}public People(string _name, int _id){name = _name;id = _id;}public string Name{get { return name; }set { name = value; }}public int ID{get { return id; }set { id = value; }}}//使用new约束class ItemFactory<T> where T : new(){public T GetNewItem(){return new T();}}//输出static void Main(string[] args){ItemFactory<People> PeopleFactory = new ItemFactory<People>();//此处编译器会检查People是否具有公有的无参构造函数。否则会报错Console.WriteLine("{0}'ID is {1}.", PeopleFactory.GetNewItem().Name, PeopleFactory.GetNewItem().ID);}//打印结果为:张山'ID is 1.
结语
本文介绍了new关键字的三种用法,欢迎大家留言讨论。