1. 程式人生 > >Unity中C#高階特性匿名型別使用

Unity中C#高階特性匿名型別使用

        有時候需要封裝一些簡單的資料,但是不需要任何關聯的方法、事件、屬性或者是自定義的建構函式,這時候就可以使用匿名型別來實現了:

        當定義一個匿名型別需要使用了關鍵字var和物件初始化的語法。使用關鍵字var可以是編譯器在編譯的時候自動新的類的定義。初始化語法告訴編譯器建立私有的後臺欄位和(私有)屬性。

        新建一個類

using UnityEngine;
using System.Collections;
using System;
using System.Reflection;

/// <summary>
/// Anonymous types.學習C#高階特性匿名方法//
/// </summary>
public class AnonymousTypes : MonoBehaviour {
	
	// Use this for initialization
	void Start () {
		//構建一個匿名物件表示汽車//
		var myCar = new{Color1 = "White",Make = "make",CurrSpeed = 55};
		var yourCar = new{Color1 = "White",Make = "make",CurrSpeed = 55};

		ReflectionAnonymousTypes (myCar);

		Debug.Log ("MyCar is a " + myCar.Color1 + " " + myCar.Make + " " + myCar.CurrSpeed);
		//呼叫輔助方法通過實參創造匿名型別//
		BuildAnonType("BMW","Black",100);
	}
       
      // 檢視匿名型別的資料型別//
	void ReflectionAnonymousTypes(object obj){
		Debug.Log ("obj.GetType().Name " + obj.GetType ().Name);
		Debug.Log ("base class " + obj.GetType ().Name + "of" + obj.GetType().BaseType);
		Debug.Log ("obj.ToString() " + obj.ToString());
		Debug.Log ("obj.GetHashCode() " + obj.GetHashCode());
	}

	// Update is called once per frame
	void Update () {
	
	}

<pre name="code" class="csharp">	void BuildAnonType(string make,string mColor,int currSp){

		// 使用傳入引數構建匿名型別//
		var car = new {Make = make,Color1 = mColor, Speed = currSp};

		//使用該型別獲取屬性資料//
		Debug.Log ("You have a " + car.Color1 + " " + car.Make + " " +car.Speed);
		Debug.Log ("car" + car);
	}
}


上述程式碼中,建立一個新建匿名型別的方法BuildAnonType()

<pre name="code" class="csharp">void BuildAnonType(string make,string mColor,int currSp){

		// 使用傳入引數構建匿名型別//
		var car = new {Make = make,Color1 = mColor, Speed = currSp};

		//使用該型別獲取屬性資料//
		Debug.Log ("You have a " + car.Color1 + " " + car.Make + " " +car.Speed);
		Debug.Log ("car" + car);
}
以及使用了硬編碼實現的一個 匿名型別
var myCar = new{Color1 = "White",Make = "make",CurrSpeed = 55};
然後在Start()中呼叫執行既可以得到這兩個匿名型別