【发布时间】:2019-07-31 15:34:12
【问题描述】:
我有一个来自另一个被引用项目的 VB 类。它是用VB编写的,函数GetCachedObject受到保护,所以我不能使用它。
我正在尝试将 VB 类用作基类,以便我可以派生和使用它的函数。
这是VB中的基类:
Public MustInherit Class RequestLifetimeCacheBase
Private ReadOnly _requestContext As HttpContextBase
Public Sub New(requestContext As HttpContextBase)
Me._requestContext = requestContext
End Sub
Public Sub New(controller As Controller)
Me.New(controller.HttpContext)
End Sub
Protected Function GetCachedValue(Of TValue As Structure)(cacheKey As String) As TValue?
Dim value = Me._requestContext.Items(cacheKey)
If TypeOf value Is TValue Then
Return DirectCast(value, TValue)
Else
Return Nothing
End If
End Function
Protected Sub SetCachedValue(Of TValue As Structure)(cacheKey As String, value As TValue?)
If value.HasValue Then
Me._requestContext.Items(cacheKey) = value.Value
Else
Me._requestContext.Items.Remove(cacheKey)
End If
End Sub
Protected Function GetCachedObject(Of TObject As Class)(cacheKey As String) As TObject
Return TryCast(Me._requestContext.Items(cacheKey), TObject)
End Function
Protected Sub SetCachedObject(Of TObject As Class)(cacheKey As String, value As TObject)
If value IsNot Nothing Then
Me._requestContext.Items(cacheKey) = value
Else
Me._requestContext.Items.Remove(cacheKey)
End If
End Sub
End Class
我在 C# 中完成了以下操作:
public class RequestLifetimeCache : RequestLifetimeCacheBase
{
public RequestLifetimeCache(Controller controller) : base(controller)
{
}
public WebsiteDatabaseContext CustomerDatabase
{
get
{
return RequestLifetimeCacheBase.GetCachedObject("Customer database");
}
}
}
但我收到两个错误:
: base(controller) - 对“HttpContextBase”类型的引用声称它在“System.Web”中定义,但找不到
还有(由于受保护的功能)
return RequestLifetimeCacheBase.GetCachedObject("Customer database") - 无法通过“RequestLifetimeCacheBase”类型的限定符访问受保护的成员“RequestLifetimeCacheBase.GetCachedObject(string)”;限定符必须是“RequestLifetimeCache”类型(或派生自它
有其他方法吗?
我正在使用 .NET Core 2.2
干杯
【问题讨论】:
-
如果您提供基类的代码 - 或者至少提供您想要覆盖的成员,会更容易。
-
更新答案。
-
对于您的第二个问题,您可以使用
this或完全省略对象引用来引用此方法(按照惯例,它将是this)。例如。return this.GetCachedObject("Customer database");应该可以工作。 -
关于第一个问题,我建议您没有引用声明
HttpContextBase的程序集。 -
对于第一个错误,您的项目存在问题,而另一个项目是针对不同版本的 .net 框架甚至完全不同的框架构建的(例如框架与核心)跨度>
标签: c# vb.net class inheritance base