0

有什么方法可以根据对象的类型推断出接口。例如,如果我有以下对象:

public class Person
{
  public string FirstName
  { get; set; }

  public string LastName
  { get; set; }
}

我希望能够推断出这个接口:

public interface IPerson
{
  string FirstName
  { get; set; }

  string LastName
  { get; set; }
}

我想做的是能够创建一个通用代理工厂,使用反射.emit,它在编译时遵守推断的接口。我知道我可以改为返回具有所有对象属性的动态对象,但这都是在运行时与编译时处理的。

编辑

对我想要实现的目标进行更多解释。我想创建一个代理类,它有一个带有这样签名的方法:

public T GetProxyFor<U>(U SomeObject);

这样,用户可以调用 GetProxyFor(People) 并取回一个 PeopleProxy 对象,该对象将实现 People 对象(或任何其他对象)的属性。这样,使用此代码的人可以调用 PeopleProxy.LastName 并且这将成功编译,但是对 PeopleProxy.Age 的调用会在编译时导致错误,因为它不存在。

我对反射和发射相当陌生,所以我想要的可能是不可能的。

4

1 回答 1

1

基本上,您要求的是执行一些在编译时创建接口的代码。

您的选择是:

  1. 使用类似 T4 的东西。您可以使用它在编译时根据某些输入生成 C# 代码。
  2. 使用 F# 类型提供程序。这基本上正是您想要的:它可以在编译时执行代码,并在您编写调用GetProxyFor(). 但是在 C# 中没有类似的东西,因此它需要您切换到 F#(至少对于使用GetProxyFor().
  3. 想想这个问题背后的根本问题(你没有告诉我们)并以另一种方式解决它。
于 2013-08-23T20:02:51.140 回答