2

创建可以访问类似命名字段的方法,但在 c# 中没有继承的不同类型的对象。

例如。我有 2 节课:

      public class MyClass1
      {
          public int Id { get; set; }
      }
      public class MyClass2
      {
          public int Id { get; set; }
      }

我需要创建方法并将每个类的实例传递给它:

    DoStuff(new MyClass1());
    DoStuff(new MyClass2());

方法将是这样的:

    private void DoStuff<T>(T obj)
    {
        int i = obj.Id(); // here is the problem
    }

是的,问题是,这obj无法解决Id。解决方案很简单 -RootClass使用Id属性创建,并使用public class MyClass1: RootClass... ,但我不能这样做。

问题是:我可以 int i = obj.Id();在不创建的情况下使用 lineRootClass吗?

编辑:我需要这样的答案:
不,因为......或者
是的,这样做......

4

1 回答 1

7

这就是接口存在的典型原因:描述一个通用契约,但类之间没有关系。

我建议你创建这个界面

public interface IHasId { 
    int Id { get; set; } 
} 


  public class MyClass1 : IHasId
  {
      public int Id { get; set; }
  }
  public class MyClass2 : IhasId
  {
      public int Id { get; set; }
  }


...


private void DoStuff<T>(T obj) 
    where T : IHasId // constraint my be moved to the class declaration
{
    int i = obj.Id();
}

创建此接口将使您避免引入根类,如果类没有根行为,则可能不希望引入根类。

于 2013-05-30T06:50:23.683 回答