首页 文章详情

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

DotNet NB | 81 2022-07-13 19:00 0 0 0
UniSMS (合一短信)

      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>();    //此处编译器会检查Employee是否具有公有的无参构造函数。否则会报错    Console.WriteLine("{0}'ID is {1}.", PeopleFactory.GetNewItem().Name, PeopleFactory.GetNewItem().ID);}//打印结果为:张山'ID is 1.


结语

    本文介绍了new关键字的三种用法,欢迎大家留言讨论。

参考:微软官网


推荐阅读:
  API 工程化分享
  我的微软 MVP 之路
【译】ASP.NET Core 6 中的性能改进
【译】.NET 7 预览版 1 中的 ASP.NET Core 更新
【译】C# 11 特性的早期预览

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2021开发者路线图
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf开发者大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终总结
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter