我们有一个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
富国沪深
TA贡献1790条经验 获得超9个赞
如您所说,如果使用者不了解IBleDevice,则可以在管理器类中为设备属性使用“动态”类型。像这样:
public dynamic Device
{
get;
}
然后消费者可以写
new Manager().Device.GetBleId();
而且您将不会获得任何编译错误,并且在运行时GetBleId也将执行
- 2 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消