为了账号安全,请及时绑定邮箱和手机立即绑定

在C#中公开子接口方法

在C#中公开子接口方法

C#
跃然一笑 2021-04-30 15:19:47
我们有一个Manager类,它公开了IDevice类型的属性,public interface IDevice {    string GetId();}public class Manager{    public IDevice Device    {     get;    }}现在,我有了一个从IDevice扩展的新接口,public interface IBleDevice : IDevice{   string GetBleId();}有没有一种方法可以将IBleDevice的方法公开给具有相同父引用(IDevice)的类的使用者而无需强制转换?例如:void main(){  new Manager().Device.GetBleId(); // which requires casting now}
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

如何使用通用方法。


public interface IDevice

{

    string GetId();

}


public class Manager

{


    public TResult GetDevice<TResult>() 

        where TResult : IDevice

    {

        return (TResult)Device;

    }


    public IDevice Device

    {

        get;

    }

}


public interface IBleDevice : IDevice

{

    string GetBleId();

}

您可以这样使用。


new Manager().GetDevice<IBleDevice>().GetBleId(); // which requires casting now


查看完整回答
反对 回复 2021-05-16
?
富国沪深

TA贡献1790条经验 获得超9个赞

如您所说,如果使用者不了解IBleDevice,则可以在管理器类中为设备属性使用“动态”类型。像这样:


public dynamic Device

    {

     get;

    }

然后消费者可以写


 new Manager().Device.GetBleId();

而且您将不会获得任何编译错误,并且在运行时GetBleId也将执行


查看完整回答
反对 回复 2021-05-16
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信