意外的接口转换

时间:2009-02-03 23:10:08

标签: vb.net

我刚刚意外地发现这似乎有效:

Public Interface Ix
    ReadOnly Property TestProp()
End Interface

Public Interface Iy
    Property TestProp()
End Interface

Public Sub TestSub
    Dim x As Ix = Me.InstantiationNotImportant()
    Dim y As Iy = CType(x, Iy)
End Sub

也许我今天写了太多代码,但这对我来说没有意义。我怎么可能将一个界面转换为另一个甚至略有不同的界面?

有什么想法吗?

编辑:看来我确实只是因为编码过多而头脑清醒。经过一点睡眠,世界再次有意义。 :)

2 个答案:

答案 0 :(得分:1)

实例化很重要,因为该方法可以生成一个实现两个接口的对象,使得这些代码完全有意义。否则,我不确定。

答案 1 :(得分:1)

像Garry一样,实例化非常重要,因为如果我这样做:

public interface IX { }
public interface IY { }
public class Test : IX { }

以下内容无效。

IX xvar = new Test();
IY yvar = xvar as IY; \\Returns null.

IY yvar = (IY)xvar; \\Throws cast exception.

它运行但是yvar将为null,因为无法进行强制转换,但是如果你声明这样的测试:

public class Test : IX,IY { }

它现在可以工作,因为Test使用两个接口,并且从xvar到Y的对象的转换是有效的。