加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有不同类型的接口

发布时间:2020-12-16 01:58:36 所属栏目:百科 来源:网络整理
导读:我有一个问题,我有两个实现,我想共享一个接口,但他们将有“相同参数”的不同类型,请参阅一个Guid和一个Int. 例如: public Class1 : IGetObject { GetObjectBy(int Id);}public Class2 : IGetObject { GetObjectBy(Guid Id);} 在应用程序的另一端,“Id”参数
我有一个问题,我有两个实现,我想共享一个接口,但他们将有“相同参数”的不同类型,请参阅一个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);
}

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

我认为可能的想法是创建一个这样的新类型并在公共接口中声明它.通过这种方式,实现知道它应该使用哪个属性:

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方法,然后在接口的实现中解析(或转换)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); 
       //... 
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读