vb.net - 如何在 vb 通用接口(interface)中创建一个返回实现类实例的方法?

标签 vb.net generics interface

在 Visual Basic 中,我想创建一个接口(interface),其中包含一个返回实现类的对象的函数。那就是

public interface I
  function maker as ???
end interface

public class X
  implements I
  function maker as X
    return new X()
  end function
end class

public class Y
  implements I
  function maker as Y
    return new Y()
  end function
end class

有什么办法可以表达吗?我想我总是可以这么说maker返回 I而不是XY ,但随后调用者将不得不转换它。我想将接口(interface)定义为

public interface I(of ii as I)

但是这样做的全部目的是为了让我可以创建一个使用 of I 的泛型类。 ,如果我这么说,那么编译器坚持无限回归 of I(of I(of I...

最佳答案

不完全是,但你可以这样做:

Public Interface I(Of T)
    Function Maker() As T
End Interface

Public Class X
    Implements I(Of X)

    Public Function Maker() As X Implements I.Maker
        Return New X()
    End Function
End Class

或者,像这样:

Public Interface I
    Function Maker() As I
End Interface

Public Class X
    Implements I

    Public Function Maker() As I
        Return New X()
    End Function
End Class

这些选项都不会强制派生类返回其自己类型的实例,但它们允许您以这种方式实现它。

关于vb.net - 如何在 vb 通用接口(interface)中创建一个返回实现类实例的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13748909/

相关文章:

c# - 如何使用 LINQ 批量查找/匹配和更新记录?

mysql - ASP.net 代码返回打开 session 错误

swift - 通用数组上的函数

vb.net - 尝试使用 Catch 显示输入错误消息

java - 泛型扩展

java - 参数化 Java 类以获取任意多个接口(interface)

delphi - 如何获取Delphi中作为泛型参数传递的接口(interface)的GUID?

c# - 在复杂的对象结构中创建类的只读版本

java - 为什么我们需要 super 关键字来调用默认接口(interface)方法?

vb.net - 检查是否在 vb.net 2010 中打开了特定的表单实例