代码之家  ›  专栏  ›  技术社区  ›  Brian MacKay

意外的接口转换

  •  1
  • Brian MacKay  · 技术社区  · 16 年前

    我只是偶然发现,这似乎奏效了:

    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 回复  |  直到 16 年前
        1
  •  1
  •   Nathan W    16 年前

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

    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的转换是有效的。

        2
  •  1
  •   Garry Shutler    16 年前

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