ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

.NET(C#)new关键字的三种用法

2021-11-17 21:01:23  阅读:114  来源: 互联网

标签:name C# class say animal new NET public


new是我们大家所熟知的英文单词,但在C#中,它是一个关键字,它可以做运算符,也可以做修饰符,还可以用在泛型T参数约束中。下面我们来介绍一下这3种用法。

1、new 运算符:用于创建对象和调用构造函数。这个我们创建对象实例就比较常用了,比如:

StringBuilder str=new  StringBuilder();

2、new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。简单的说,就是现在写的这个类,想写一个和基类中相同的成员,而不继承基类的。运用多态的特性时,也不会调用这个显示隐藏的方法。具体看下如下代码:

  public class Program
    {
        static void Main(string[] args)
        {
            animal a = new animal();
            a.name = "animal";
            a.say();
            cat c = new cat();
            c.name = "cat";
            c.say();
            dog d = new dog();
            d.name = "dog";
            d.say();
            sheep s = new sheep();
            s.name = "sheep";
            s.say();
            animal a1 = new cat();
            a1.say();
            animal a2 = new dog();
            a2.say();
            animal a3 = new sheep();
            a3.say();
        }
    }
    class animal
    {
        public string name { get; set; }
        public virtual void say()
        {
            Console.WriteLine("animal say");
        }
    }
    class cat : animal
    {
        public override void say()
        {
            Console.WriteLine("cat say");
        }
    }
    class dog : animal
    {
        public new void say()   //这个方法被显示隐藏了
        {
            Console.WriteLine("dog say");
        }
    }
    class sheep : animal
    {
    }

3、new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。举个例子看一下,泛型类中T要求有一个无参的构造函数,代码如下,

 public class Employee
    {
        private string name;
        private int id;
        public Employee()
        {
            name = "Temp";
            id = 0;
        }
        public Employee(string s, int i)
        {
            name = s;
            id = i;
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public int ID
        {
            get { return id; }
            set { id = value; }
        }
    }
    class ItemFactory where T : new()
    {
        public T GetNewItem()
        {
            return new T();
        }
    }
    public class Test
    {
        public static void Main()
        {
            ItemFactory EmployeeFactory = new ItemFactory(); ////此处编译器会检查Employee是否具有公有的无参构造函数。 //若没有则会有The Employee must have a public parameterless constructor 错误。 Console.WriteLine("{0}'ID is {1}.", EmployeeFactory.GetNewItem().Name, EmployeeFactory.GetNewItem().ID);
        }
    }

标签:name,C#,class,say,animal,new,NET,public
来源: https://www.cnblogs.com/moshaochen/p/15569437.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有