我們要建立一個預設的物件,可以使用
System.Activator.CreateInstance
方法,不過,當泛型參數型別為字串 string 的時候,就會有問題了,因為,這個字串型別,他沒有無參數的預設建構函式,因此,我們需要呼叫其他的建構函式,這樣才能夠幫我們產生一個字串物件出來;因此,對於字串型別,我們使用了 Activator.CreateInstance(type, "".ToCharArray()
表示式來建立字串型別的物件。
由於呼叫
System.Activator.CreateInstance
所得到的物件,我們還需要將其轉型成為我們指定的泛型參數型別,在這裡,我們可以使用 (T) 就可輕鬆達到轉型的需求。public class MyClass
{
public int ID { get; set; }
public string Name { get; set; }
}
public struct MyStruct
{
public int ID { get; set; }
public string Name { get; set; }
}
public class MyGenericClass<T>
{
public T MyObject { get; set; }
public T GetInstance()
{
T myObject;
var type = typeof(T);
// 類別型別,使用 Activator.CreateInstance 動態來產生物件
if(type.Name != "String")
{
myObject = (T)Activator.CreateInstance(type);
}
else
{
myObject = (T)Activator.CreateInstance(type, "".ToCharArray());
}
return myObject;
}
}
測試用的程式碼
在這裡,我們使用泛型型別 MyGenericClass,請這個型別的 GetInstance 方法,幫助我們產生我們所指定的型別物件。
//var tmp = new string();
var tmp = new int();
MyGenericClass<int> myGenericObject1 = new MyGenericClass<int>();
MyGenericClass<MyClass> myGenericObject2 = new MyGenericClass<MyClass>();
MyGenericClass<MyStruct> myGenericObject3 = new MyGenericClass<MyStruct>();
MyGenericClass<string> myGenericObject4 = new MyGenericClass<string>();
Console.WriteLine($"MyGenericClass<int>() Object is : {myGenericObject1.GetInstance()}");
Console.WriteLine($"MyGenericClass<MyClass>() Object is : {myGenericObject2.GetInstance()}");
Console.WriteLine($"MyGenericClass<MyStruct>() Object is : {myGenericObject3.GetInstance()}");
Console.WriteLine($"MyGenericClass<string>() Object is : {myGenericObject4.GetInstance()}");
Console.WriteLine($"Press any key to Exist...{Environment.NewLine}");
Console.ReadKey();
執行結果
MyGenericClass<int>() Object is : 0
MyGenericClass<MyClass>() Object is : GenericDynObject.MyClass
MyGenericClass<MyStruct>() Object is : GenericDynObject.MyStruct
MyGenericClass<string>() Object is :
Press any key to Exist...
對於已經具備擁有 .NET / C# 開發技能的開發者,可以使用 Xamarin.Forms Toolkit 開發工具,便可以立即開發出可以在 Android / iOS 平台上執行的 App;對於要學習如何使用 Xamarin.Forms & XAML 技能,現在已經推出兩本電子書來幫助大家學這這個開發技術。
這兩本電子書內包含了豐富的逐步開發教學內容與相關觀念、各種練習範例,歡迎各位購買。
想要購買
Xamarin.Forms 快速上手
電子書,請點選 這裡
想要購買
XAML in Xamarin.Forms 基礎篇
電子書,請點選 這裡
MyGenericClass<T>
,這個泛型類別只有一個方法GetInstance
,他會根據我們建立這個泛型類別所傳送過去的型別,幫我們傳回這個型別的預設物件。