在C#中new关键字据说有三种用法

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();      } 

打印结果如下:

在C#中new关键字据说有三种用法

三、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关键字的三种用法,欢迎大家留言讨论。