代码之家  ›  专栏  ›  技术社区  ›  Thomas Flinkow

为什么持有接口类型的接口属性不能用持有实现接口的具体类型的属性来实现?

  •  -1
  • Thomas Flinkow  · 技术社区  · 7 年前

    实现接口时

    public interface IMainViewModel
    {
        ICommand DoStuffCommand { get; }
    }
    

    为什么是

    public class MainViewModel
    {
        DelegateCommand DoStuffCommand { get; }
    }
    

    具有

    public class DelegateCommand : ICommand { ... }
    

    不允许?

    财产 DoStuffCommand 无法从接口实现属性 IMainViewModel . 类型应为 ICommand .


    DelegateCommand 工具 I命令 ,接口 合同保证 我可以使用 委派命令 完全一样 我什么都可以用 I命令


    我想知道为什么一个接口属性不能用一个具体的类型来实现,因为从我的观点来看,我不会认为它是错误的(或者行为改变,或者功能破坏)。

    1 回复  |  直到 7 年前
        1
  •  5
  •   Damien_The_Unbeliever    7 年前

    返回类型 DoStuffCommand 因此,显式使用 MainViewModel 对象可以很容易地获得 DelegateCommand IMainViewModel 参考文献并不明智:

    public class MainViewModel : IMainViewModel
    {
        DelegateCommand DoStuffCommand { get; }
        ICommand IMainViewModel.DoStuffCommand => DoStuffCommand;
    }
    

    1