1. 程式人生 > 其它 >c#中的多義關鍵字

c#中的多義關鍵字

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

  想要更快更方便的瞭解相關知識,可以關注微信公眾號