[英]Inherit a base class in C#
我有一个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'中找到,但找不到
并且(由于受保护的功能)
返回RequestLifetimeCacheBase.GetCachedObject(“客户数据库”)-无法通过类型'RequestLifetimeCacheBase'的限定符访问受保护的成员'RequestLifetimeCacheBase.GetCachedObject(string)'; 限定符必须为“ RequestLifetimeCache”类型(或从其派生)
有其他方法吗?
我正在使用.NET Core 2.2
干杯
第一个错误与问题的继承问题无关。 您可能只是缺少using
指令或引用。
对于第二个错误,此行有两个问题:
return RequestLifetimeCacheBase.GetCachedObject("Customer database");
首先,对GetCachedObject()
的调用也需要一个类型实参,并且该类型实参必须是引用类型—不允许使用任何值类型(结构或基元)。
其次,使用base
关键字而不是类型的名称。
结果看起来像这样:
return base.GetCachedObject<WebsiteDatabaseContext>("Customer database");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.