一个简单的接口赋值问题

x

瞬间懵

看到一段代码,这样的...

private void SomeMethod1()
{
    Int32 x = 1, y = 2;
    IComparable c = x;
    //...
}

一下惊呆了...心里想的是:还有这种操作...给IComparable类型的变量c赋值为int类型的x...

然后我又这样...

IDisposable d = 9;
//报错→无法将类型“int”隐式转换为“System.IDisposable”

可能接口用的比较少吧...脑袋一下瓦特了...

还犯二的去搜了一下[无法将类型“int”隐式转换为“System.IDisposable”]...

你所知道的,见到不一定认识...

“接口继承的一个重要特点是,凡是能使用具名接口类型的实例的地方,

都能使用实现了接口的一个类型的实例。”--摘自《CLR via C#》

原来是这样的...

public void 原来如此()
{
    IComparable c1 = null;

    //使用[IComparable]的实例的地方[下面的c1所在的位置]
    IComparable c2 = c1;
    //都能使用实现了接口[IComparable]的一个类型[Int32]的实例[@int]
    Int32 @int = new Int32();
    c2 = @int;

}

也符合设计原则[里氏替换原则(LSP)]

纸上得来终觉浅,绝知此事要躬行...

很多知识从书本上学到了,但是实际中运用的并不多,大家知道的,我就很少定义变量为接口的这种写法[IComparable c1 = null;IList<int> list = new List<int>();]...

用着OO的框架,写着面向过程范式的代码...

也知道设计原则和接口的用法,并且看到

“接口继承的一个重要特点是,凡是能使用具名接口类型的实例的地方,

都能使用实现了接口的一个类型的实例。”

这句的时候,我就想到了,里氏替代原则[所有引用基类(父类)的地方必须能透明地使用其子类的对象]

但是真的遇上了还是会懵...基础要懂,还要会灵活运用啊...

让各位同仁贱笑了...GG

x

猜你喜欢

转载自www.cnblogs.com/love-zf/p/9326750.html