c#中的多義關鍵字
阿新 • • 發佈:2022-02-04
new
new用三種場景,最常用的例項化,泛型引數時的例項化約束,第三種是顯式隱藏繼承成員。
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace KeyWordsDemo { class NewDemo : IDemo { public void Run() { //new 1 var table = new DataTable(); //new 2 Show<Parent>(new Child()); //new 3 Parent parent = new Child(); parent.Print(); } //new 2 static void Show<T>(T t) where T : new() { WriteLine(t.GetType()); } #region new 3 public class Parent { public virtual void Print() { WriteLine("Parent Print"); } public virtual void View() { } } public class Child : Parent { //now 3 public new void Print() { WriteLine("Child Print"); } public override void View() { } } #endregion } }
default
default有兩種用法,一是返回型別的預設值,二是在switch中作為非選項值。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace KeyWordsDemo { class DefaultDemo : IDemo { public void Run() { //default 1 WriteLine(default(int)); WriteLine(default(bool)); WriteLine(default(DateTime)); WriteLine(default(string)); switch (default(string)) { case "": WriteLine("空字串"); break; case null: WriteLine("null"); break; //default 2 default: WriteLine("其他"); break; } } } }
out
out有兩種用法,一是作為方法輸出引數,從方法內部返回資料,二是用在介面和委託的協變中,如案例中的interface IParent<out R>
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace KeyWordsDemo { class OutDemo : IDemo { public void Run() { //out 1 Computer(out int result); WriteLine(result); WriteLine("------------"); IParent<object> p1 = new Child<object>(); IParent<object> p2 = new Child<string>(); WriteLine(p1.GetType()); WriteLine(p2.GetType()); p1.Print(); p2.Print(); p1 = p2; p1.Print(); } //out 1 public void Computer(out int result) { result = 10; } //out 2 interface IParent<out R> { R Print(); } class Child<R> : IParent<R> { public R Print() { var r = default(R); WriteLine($"{typeof(R).Name}"); return r; } } } }
想要更快更方便的瞭解相關知識,可以關注微信公眾號