C# new用法總結

來源:互聯網
上載者:User

標籤:

三種用法如下: 在 C# 中,new 關鍵字可用作運算子、修飾符或約束。 1)new 運算子:用於建立對象和調用建構函式。這種大家都比較熟悉,沒什麼好說的了。 2)new 修飾符:在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。 3) new 約束:用於在泛型聲明中約束可能用作型別參數的參數的類型。關於第二種用法看下例:using System;namespace ConsoleApplication1{    public class BaseA    {        public int x = 1;        public void Invoke()        {            Console.WriteLine(x.ToString());        }        public int TrueValue        {            get { return x; }            set { x = value; }        }    }    public class DerivedB : BaseA    {        new public int x = 2;        new public void Invoke()        {            Console.WriteLine(x.ToString());        }        new public int TrueValue        {            get { return x; }            set { x = value; }        }    }    class Test    {        static void Main(string[] args)        {            DerivedB b = new DerivedB();            b.Invoke();//調用DerivedB的Invoke方法,輸出:2            Console.WriteLine(b.x.ToString());//輸出DerivedB的成員x值:2            BaseA a = b;            a.Invoke();//調用BaseA的Invoke方法,輸出:1            a.TrueValue = 3;//調用BaseA的屬性TrueValue,修改BaseA的成員x的值            Console.WriteLine(a.x.ToString());//輸出BaseA的成員x的值:3            Console.WriteLine(b.TrueValue.ToString());//輸出DerivedB的成員x的值,仍然是:1//可見,要想訪問被隱藏的基類的成員變數、屬性或方法,辦法就是將子類造型為父類,然//後通過基類訪問被隱藏的成員變數、屬性或方法。        }     }} new約束指定泛型類聲明中的任何型別參數都必須具有公用的無參數建構函式.請看下例:using System;using System.Collections.Generic;namespace ConsoleApplication2{    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<T> where T : new()    {        public T GetNewItem()        {            return new T();        }    }    public class Test    {        public static void Main()        {            ItemFactory<Employee> EmployeeFactory = new ItemFactory<Employee>();            ////此處編譯器會檢查Employee是否具有公有的無參建構函式。            //若沒有則會有The Employee must have a public parameterless constructor 錯誤。            Console.WriteLine("{0}‘ID is {1}.", EmployeeFactory.GetNewItem().Name, EmployeeFactory.GetNewItem().ID);        }    }}

C# new用法總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.