繁体   English   中英

继承C#中的基类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM