基於unity開發瞭解C#語言中的委託與事件(二)

1、泛型

1.泛型的概念數據結構

泛型,咱們從字面意義上能夠將它通俗的解釋爲「很寬泛的類型」,相似於C++語言中的模板機制,在數據結構中出現的很是頻繁。<T>是泛型的標誌符號,裏面的字母「T」是類型佔位符,能夠表明任何類型,在定義泛型類,泛型方法的時候,使用「T」代替,在真正使用的時候,再傳遞真正對應的類型。ide

2.泛型類this

在開發中List<T>和Dictionary<K,V>兩個數據結構就是「泛型類」。<T>標誌符號裏面的「T」是Type的縮寫,能夠用任何字母段替代,不區分大小寫,通常默認大寫字母類中有幾個類型不肯定,就在<>內寫幾個「類型佔位符」。編碼

例如:spa

public class MyClass<T>{ }事件

public class MyClass<A,B>{ }開發

public class MyClass<C,D,E,F,G>{ }get

3.泛型方法數學

在Unity 中最常使用的GetComponent<T>()就是「泛型方法」。在定義方法的時候,方法名的後面使用<T>來定義。string

若是當前的方法所在的類中,已經定義了這個類型,方法名的後面就不須要再次定義;反之則必須定義。

例如:

public T MyFun() { }

Public T MyFun<T>(T name){ }

 

① class Myclass

   {

        public override void Method<T>(T t)

        {        }

    }

 

② class SampleClass<T>

  {

    void Swap(T t1, T t2) { }

  }

* 2、Unity中的兩種單例寫法

1.Mono 子類C#腳本單例

①定義一個當前類的公開、靜態、當前類類型返回值的一個字段;

②在Awake 事件方法中完成該字段的賦值。

public class MyClass : MonoBehaviour

{

    static MyClass _instance;

    void Awake () {

        _instance = this;

    }

 

    public static MyClass Instance {

        get {

            return _instance;

        }

    }

}

 

 

2.非Mono 子類C#腳本單例

①定義一個當前類的私有,靜態,當前類類型返回值的字段;

②建立一個無參私有構造方法;

③建立一個公開,靜態,用於封裝字段的屬性;在該屬性內實現單例。

public class MyClass

{

    private static MyClass _instance = new MyClass();

    public static Class Instance { 

        get { 

            return _instance; 

        } 

    }    

 

    private MyClass() {}

}

3、委託

1.委託簡介:委託能夠把方法當作(方法的)參數來傳遞。

2.委託的語法

訪問修飾符delegate 返回值類型委託名稱(參數列表);

public delegate void CalcDelegate(int a, int b);

委託聲明的關鍵字是:delegate

委託聲明的位置能夠在類外,也能夠在類內

區別是在VS 控制檯項目中建立的腳本,都處於一個命名空間(namespace)下,而在Unity 裏面建立的腳本卻沒有namespace 這個標示代碼塊,可是這些腳本默認處於同一命名空間下。

定義在類外,同命名空間內其餘的類也可使用這個委託;

定義在類內,則是做爲類的成員存在,只能在當前類中訪問。

 

聲明的委託要和要綁定的方法的「簽名」保持一直;

簽名指的是方法的返回值類型,以及參數列表的類型。

舉例說明:100 和3.14 都是數學意義上的數字,可是兩個倒是不一樣的類型,一個是int,

一個是float。

方法的類型是委託,可是這裏的「委託」是寬泛意義上的,相似於上面的「數字」。當你須要定義某個方法的委託的時候,就須要保證簽名一致。簽名由方法的返回值類型,方法參數列表的類型,個數,順序決定的。

總結起來委託的步驟就是:

①定義具有相同「簽名」的多個方法;

②根據方法的的簽名定義相同簽名的委託;

③把方法當成委託類型的參數進行傳遞。

 

最後咱們經過編碼實現一個計算器的實際案例來加深這部分知識點的理解

 

public deletegate int Compute(int a,int b); //定義一個委託(返回值類型int,2個參數)

class Program

{

static void Main(string[] args)

{

  Calculate(Add(10,30));

}

 

static int Add(int a,int b)

{

  return a + b;

}

 

static int Sub(int a,int b)

{

return a - b;

}

 

static int Mult(int a,int b)

{

  return a * b;

}

static int Divide(int a,int b)

{

  return a / b;

}

 

static void Calculate(Compute com,int a,int b)

{

  Console.WriteLine(com(a + b));

}

}

相關文章
相關標籤/搜索