2009-02-03 52 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

實例化非常重要,因爲該方法可以生成一個實現這兩個接口的對象,從而使此代碼具有完整意義。否則,我不確定。