我有一个问题,我有两个实现,我想共享一个接口(interface),但它们将具有不同类型的“相同参数”,请参阅一个 Guid 和一个 Int

例如:

public Class1 : IGetObject {
   GetObjectBy(int Id);
}

public Class2 : IGetObject {
   GetObjectBy(Guid Id);
}

在应用程序的另一端,“Id”参数将来自用户输入的字符串。所以我也有
public GetObjectMethod(){
  string id = dropdown.SelectedItem.Text;
  IGetObject GetObject = Shared.Instance.GetObject;
  var result = GetObject.GetObjectBy(id);
}

如何让实现共享接口(interface),以便我不必更改 GetObjectMethod 中的某些内容?

我认为也许一个想法是像这样创建一个新的 类型 并在公共(public)接口(interface)中声明它。通过这种方式,实现知道它应该使用哪个属性:
public class ObjectId(){
   public ObjectId(string id){
      if(Guid.TryParse(id)){
       /// Figure out what value that should be set
      }
   }

   public Guid ObjectIdAsGuid;
   public Int  ObjectIdAsInt;
}

最好的方法是什么?

最佳答案

您可以创建接受字符串(或对象)的 GetObjectBy 方法,然后在接口(interface)的实现中解析(或转换)id:

public Class1 : IGetObject {
   public Foo GetObjectBy(string Id)
   {
      var id = Int32.Parse(Id);
      //...
   }
}

public Class2 : IGetObject {
   public Foo GetObjectBy(string Id)
   {
       var id = new Guid(Id);
       //...
   }
}

关于c# - 与不同类型的接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20125160/

10-17 02:27