有没有办法根据对象的类型推断出对象的接口。例如,如果我有以下对象:
public class Person
{
public string FirstName
{ get; set; }
public string LastName
{ get; set; }
}
我希望能够推断出这个界面:
public interface IPerson
{
string FirstName
{ get; set; }
string LastName
{ get; set; }
}
我想要做的是能够使用reflection.emit创建一个通用代理工厂,它在编译时遵循推断的接口。我知道我可以返回一个包含所有对象属性的动态对象,但这都是在运行时和编译时处理的。
修改
对我正在努力实现的目标进行更多解释。我想创建一个代理类,其具有带有如下签名的方法:
public T GetProxyFor<U>(U SomeObject);
这样,用户可以调用GetProxyFor(People)并获取一个PeopleProxy对象,该对象将实现People对象(或任何其他对象)的属性。这样,使用此代码的人可以调用PeopleProxy.LastName,这将成功编译,但是对PeopleProxy.Age的调用会在编译时导致错误,因为它不存在。
我对于反射和发射是相当新的,所以我想要的可能是不可能的。
答案 0 :(得分:1)
基本上,您要求的是执行一些在编译时创建接口的代码。
您的选择是:
GetProxyFor()
的代码时生成接口。但是在C#中没有类似的东西,因此它需要您切换到F#(至少对于使用GetProxyFor()
的代码部分而言)。