Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 继承VB中的接口-从C移植代码#_C#_Vb.net - Fatal编程技术网

C# 继承VB中的接口-从C移植代码#

C# 继承VB中的接口-从C移植代码#,c#,vb.net,C#,Vb.net,因此,我正在使用一个库(Coderr,对于熟悉它的人来说),它是用C#编写的,它们的示例也是如此。我的项目当然是用VB编写的,我对实现他们示例类的模板有点困惑 其中一个现有类的示例是 我试图手动移植它,但失败了,所以使用了Telerik的C#to VB转换器。它输出的代码看起来很好,只需一次调整,类本身就可以工作得很好。除了继承条款 我现在得到的代码是: 名称空间codeRR.Client.AspNet.CurrentUserContext 公共类CurrentUserContext 继承ICo

因此,我正在使用一个库(Coderr,对于熟悉它的人来说),它是用C#编写的,它们的示例也是如此。我的项目当然是用VB编写的,我对实现他们示例类的模板有点困惑

其中一个现有类的示例是

我试图手动移植它,但失败了,所以使用了Telerik的C#to VB转换器。它输出的代码看起来很好,只需一次调整,类本身就可以工作得很好。除了继承条款

我现在得到的代码是:

名称空间codeRR.Client.AspNet.CurrentUserContext
公共类CurrentUserContext
继承IContextInfoProvider
公共函数Collect(ByVal上下文作为IErrorReporterContext)作为ContextCollectionDTO
Dim CurrentUser As CurrentUser=CType(HttpContext.Current.Session(“CurrentUser”),CurrentUser)
如果CurrentUser为Nothing,则不返回任何内容
Dim converter=新ObjectToContextCollectionConverter()
Dim集合=converter.Convert(名称、当前用户)
返回If(collection.Properties.Count=0,Nothing,collection)
端函数
作为字符串的公共只读属性名称
得到
返回“当前用户”
结束
端属性
末级
结束命名空间
与示例代码非常相似,但基本上返回的是我的自定义对象。继承行失败,原因是:

类只能从其他类继承

这是有道理的,因为
IContextInfoProvider
是一个接口。
我只是被困在如何在VB中实际使用它。我需要将该类插入到一个函数中,该函数接受类型为
IContextInfoProvider

的对象。该错误很好地说明了问题所在。一个类可以从另一个类继承,但不能从接口继承

继承意味着派生类包含的行为的一些实际实现,以及它的“签名”,而接口只是定义它的“签名”,期望在实现类中实现适当的行为,因此它只能被实现

所以

公共类CurrentUserContext
继承IContextInfoProvider
应该是

公共类CurrentUserContext
实现IContextInfoProvider

该错误很好地说明了问题所在。一个类可以从另一个类继承,但不能从接口继承

继承意味着派生类包含的行为的一些实际实现,以及它的“签名”,而接口只是定义它的“签名”,期望在实现类中实现适当的行为,因此它只能被实现

所以

公共类CurrentUserContext
继承IContextInfoProvider
应该是

公共类CurrentUserContext
实现IContextInfoProvider

类可以从其他类继承,也可以实现接口。接口通常以大写的
I
开头,例如
IContextInfoProvider

在C#中,一个类可以使用相同的语法实现一个接口或从另一个类继承:

// Implement an interface
public class CurrentUserContext : IContextInfoProvider

// Inherit from a class
public class CurrentUserContext : MyContextBaseClass
但是,在VB.Net中,实现接口的类或从另一个类继承的类采用两种不同的语法:

' Implement an interface
Public Class CurrentUserContext
    Implements IContextInfoProvider

' Inherit from a class
Public Class CurrentUserContext
    Inherits MyContextBaseClass
在您的情况下,应该使用
实现
而不是
继承
,因为您实现的是接口,而不是从类继承


我希望这能把事情弄清楚

类可以从其他类继承,也可以实现接口。接口通常以大写的
I
开头,例如
IContextInfoProvider

在C#中,一个类可以使用相同的语法实现一个接口或从另一个类继承:

// Implement an interface
public class CurrentUserContext : IContextInfoProvider

// Inherit from a class
public class CurrentUserContext : MyContextBaseClass
但是,在VB.Net中,实现接口的类或从另一个类继承的类采用两种不同的语法:

' Implement an interface
Public Class CurrentUserContext
    Implements IContextInfoProvider

' Inherit from a class
Public Class CurrentUserContext
    Inherits MyContextBaseClass
在您的情况下,应该使用
实现
而不是
继承
,因为您实现的是接口,而不是从类继承


我希望这能把事情弄清楚

您可以在VB项目中引用c#库。你为什么不把Coderr编译成一个dll,并把它作为一个引用添加进去呢?在VB.NET中,你可以使用
继承
来继承基类,而
实现
来实现一个接口。这是一个带有C#lisp:)的VB.NET代码。在VB.NET中,你不能继承接口,只能实现一个。顺便说一句,你可以在VB项目中引用c#库。你为什么不把Coderr编译成一个dll,并把它作为一个引用添加进去呢?在VB.NET中,你可以使用
继承
来继承基类,而
实现
来实现一个接口。这是一个带有C#lisp:)的VB.NET代码。在VB.NET中,你不能继承接口,只能实现一个。顺便说一句,非常合理的语法。虽然这个答案可能是正确的,但多一点文字可能有助于澄清OP和未来读者的问题。@ZoharPeled,公正的评论。希望我的编辑有帮助。:-。是的,确实有用+1Bingo,这就成功了。谢谢你。是的,额外的细节有助于解释原因,这太棒了。虽然这个答案可能是正确的,但多一点文字可能有助于为OP和未来的读者澄清问题。@ZoharPeled,公正评论。希望我的编辑有帮助。:-。是的,确实有用+1Bingo,这就成功了。谢谢你。是的,额外的细节有助于解释为什么,这太棒了。