2009-02-03 53 views
1

我刚刚发现,相当意外,这似乎工作:意外的接口转换

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 

也许我已经写了一个有点过分代码的今天,但这并不道理给我。我怎么可能将一个界面转换为另一个界面,甚至略有不同?

有什么想法?

编辑:看来,我真的只是由于太多的编码而头脑发热。经过一点睡眠之后,世界又有意义了。 :)

回答

1

像加里说实例化是非常重要的,因为如果我这样做:

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将是无效的,因为中投是不可能的,但如果你申报的测试是这样的:

public class Test : IX,IY { } 

这将现在的工作,作为测试使用两个接口,并从铸造xvar中的对象到Y是有效的。

1

实例化非常重要,因为该方法可以生成一个实现这两个接口的对象,从而使此代码具有完整意义。否则,我不确定。