我们有一个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
}
答案 0 :(得分:2)
如何使用Generic方法。
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
答案 1 :(得分:-2)
正如您所说,如果消费者不了解IBleDevice
,您可以使用&#34; dynamic&#34;在您的经理类中输入Device属性。像这样:
public dynamic Device
{
get;
}
然后消费者可以写
new Manager().Device.GetBleId();
你不会得到任何编译错误,并且在运行时GetBleId
将执行