问题: 这是可能克隆类定义使用反射吗?我不是在谈论浅层克隆,也不是深度克隆。我正在讨论定义克隆。我想要一个静态变量不是在所有实例之间共享的类,而只是我创建的定义。我(或图书馆)需要能够在稍后从这个类创建一个实例。克隆类定义(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