問題: 這是可能克隆類定義使用反射嗎?我不是在談論淺層克隆,也不是深度克隆。我正在討論定義克隆。我想要一個靜態變量不是在所有實例之間共享的類,而只是我創建的定義。我(或圖書館)需要能夠在稍後從這個類創建一個實例。克隆類定義(PCL)
問題: 你看,我需要這個,因爲以下情形的,
有此庫,希望我有具有一定的靜態方法的類型提供它。但在我的情況下,這個靜態方法需要比較另一個類型的非靜態字段中的兩個值。這使得將具有該信息的實例傳遞給該類是不可能的,因爲它尚未初始化。看看下面的例子的情況:
class MasterClass
{
public int SomeInfo {get; set;} = 10;
public void PeresentClass()
{
SOMELIBRARY.RegisterType(typeof(StaticClass));
}
}
class StaticClass
{
public static bool CanCreate(int someVar)
{
// I need to compare someVar with the SomeInfo property of MasterClass instance that presented this type to the SOMELIBRARY.
}
public StaticClass()
{
// Something irrelevant
}
}
在上面的例子中,我有過SOMELIBRARY
和無法控制,他們決定編寫代碼的方式。但他們似乎有些想要先調用CanCreate
方法,然後創建一個類的實例(如果它符合要求的話)。
但是,要使CanCreate
正常工作,首先需要訪問該類的實例StaticClass
到SOMELIBRARY
。我不能讓MasterClass
爲靜態,因爲這個類的每個實例都有多個活動。
我唯一能想到的方式是用一個指向MasterClass
的靜態字段重新定義新的StaticClass
,該字段定義了它(或克隆了定義)。然而,我的反思知識卻讓我無法做到這一點。所以在這裏我問這甚至可能嗎?我真的希望能夠在PCL配置文件下完成它。
真實世界: 只是爲了更多的信息,我實際上是在談論XAMARIN.iOS
和NSUrlProtocol
類,特別是CanInitWithRequest
方法。
可能的解決方案:隨着更多的思考,我發現解決這個問題的另一種方法是使StaticClass
通用;這樣做可以讓我有一個每個type
定義的靜態變量。但是,爲了這個工作,我需要能夠在運行時創建唯一的和可能爲空的類型。這可能嗎?
XAMARIN.iOS:不幸的是,Reflection.Emit在iOS上不可用,所以現在我不認爲這是可能的。仍然在等待你對這種情況的評論。
https://developer.xamarin.com/guides/ios/advanced_topics/limitations/#System.Reflection.Emit
什麼SOMELIBRARY與StaticClass完全相同? – Evk
@Evk:在創建類的新實例之前,它會嘗試調用CanCreate方法,以查看類是否可以處理該特定情況。 –
爲什麼CanCreate是靜態方法?那是一些圖書館的要求? – Evk