在c#中公开子接口方法

时间:2018-04-26 03:21:45

标签: c# oop

我们有一个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 个答案:

答案 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将执行