Inherit Base Class 错误不包含采用 0 个参数的构造函数
Inherit Base Class Error Does Not Contain Constructor that takes 0 arguements
我正在尝试将基 class 继承到我的 class 中,这样我就可以使用它的受保护函数。基础class内置在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
VB 中的旧方法是这样创建的:
Dim cache = New RequestLifetimeCache(Me)
Dim cachedDatabase = cache.CustomerDatabase
If cachedDatabase IsNot Nothing Then
Return cachedDatabase
End If
我正在用 C# 创建一个这样的新实例:
public WebsiteDatabaseContext customerDB
{
get
{
RequestLifetimeCache cache = new RequestLifetimeCache();
var cachedDB = cache.CustomerDatabase;
return cachedDB;
}
set
{
}
}
我的class C#代码如下:
public class RequestLifetimeCache : RequestLifetimeCacheBase
{
public RequestLifetimeCache()
{
}
public WebsiteDatabaseContext CustomerDatabase
{
get
{
return base.GetCachedObject<WebsiteDatabaseContext>("Customer database");
}
}
}
但我收到错误 'RequestLifetimeCacheBase' 不包含在以下行中采用 0 个参数的构造函数:
public RequestLifetimeCache()
我做错了什么?我是否缺少传递 HttpContext/Controller 参数或其他内容?
VB 在 .NET Framework 上,我正在研究 .NET Core
您需要传递构造函数参数。我是这样想的(我什么都不知道VB):
public class RequestLifetimeCache : RequestLifetimeCacheBase
{
public RequestLifetimeCache(HttpContextBase ctx) : base(ctx)
{
}
public RequestLifetimeCache(Controller controller) : base(controller)
{
}
public WebsiteDatabaseContext CustomerDatabase
{
get
{
return base.GetCachedObject<WebsiteDatabaseContext>("Customer database");
}
}
}
作为临时措施,我不得不用 C# 重写 VB 基础 class:
public abstract class RequestLifetimeCacheBase
{
private readonly HttpContext _requestContext;
protected RequestLifetimeCacheBase(HttpContext requestContext)
{
_requestContext = requestContext;
}
protected RequestLifetimeCacheBase(Controller controller)
: this(controller.HttpContext)
{
}
#region Generic access to cached value-type data
protected TValue? GetCachedValue<TValue>(string cacheKey)
where TValue : struct
{
var value = _requestContext.Items[cacheKey];
if (value is TValue)
{
return (TValue)value;
}
else
{
return null;
}
}
protected void SetCachedValue<TValue>(string cacheKey, TValue? value)
where TValue : struct
{
if (value.HasValue)
{
_requestContext.Items[cacheKey] = value.Value;
}
else
{
_requestContext.Items.Remove(cacheKey);
}
}
#endregion
#region Generic access to cached reference-type data
protected TObject GetCachedObject<TObject>(string cacheKey)
where TObject : class
{
return _requestContext.Items[cacheKey] as TObject;
}
protected void SetCachedObject<TObject>(string cacheKey, TObject value)
where TObject : class
{
if (value != null)
{
_requestContext.Items[cacheKey] = value;
}
else
{
_requestContext.Items.Remove(cacheKey);
}
}
#endregion
}
我正在尝试将基 class 继承到我的 class 中,这样我就可以使用它的受保护函数。基础class内置在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
VB 中的旧方法是这样创建的:
Dim cache = New RequestLifetimeCache(Me)
Dim cachedDatabase = cache.CustomerDatabase
If cachedDatabase IsNot Nothing Then
Return cachedDatabase
End If
我正在用 C# 创建一个这样的新实例:
public WebsiteDatabaseContext customerDB
{
get
{
RequestLifetimeCache cache = new RequestLifetimeCache();
var cachedDB = cache.CustomerDatabase;
return cachedDB;
}
set
{
}
}
我的class C#代码如下:
public class RequestLifetimeCache : RequestLifetimeCacheBase
{
public RequestLifetimeCache()
{
}
public WebsiteDatabaseContext CustomerDatabase
{
get
{
return base.GetCachedObject<WebsiteDatabaseContext>("Customer database");
}
}
}
但我收到错误 'RequestLifetimeCacheBase' 不包含在以下行中采用 0 个参数的构造函数:
public RequestLifetimeCache()
我做错了什么?我是否缺少传递 HttpContext/Controller 参数或其他内容?
VB 在 .NET Framework 上,我正在研究 .NET Core
您需要传递构造函数参数。我是这样想的(我什么都不知道VB):
public class RequestLifetimeCache : RequestLifetimeCacheBase
{
public RequestLifetimeCache(HttpContextBase ctx) : base(ctx)
{
}
public RequestLifetimeCache(Controller controller) : base(controller)
{
}
public WebsiteDatabaseContext CustomerDatabase
{
get
{
return base.GetCachedObject<WebsiteDatabaseContext>("Customer database");
}
}
}
作为临时措施,我不得不用 C# 重写 VB 基础 class:
public abstract class RequestLifetimeCacheBase
{
private readonly HttpContext _requestContext;
protected RequestLifetimeCacheBase(HttpContext requestContext)
{
_requestContext = requestContext;
}
protected RequestLifetimeCacheBase(Controller controller)
: this(controller.HttpContext)
{
}
#region Generic access to cached value-type data
protected TValue? GetCachedValue<TValue>(string cacheKey)
where TValue : struct
{
var value = _requestContext.Items[cacheKey];
if (value is TValue)
{
return (TValue)value;
}
else
{
return null;
}
}
protected void SetCachedValue<TValue>(string cacheKey, TValue? value)
where TValue : struct
{
if (value.HasValue)
{
_requestContext.Items[cacheKey] = value.Value;
}
else
{
_requestContext.Items.Remove(cacheKey);
}
}
#endregion
#region Generic access to cached reference-type data
protected TObject GetCachedObject<TObject>(string cacheKey)
where TObject : class
{
return _requestContext.Items[cacheKey] as TObject;
}
protected void SetCachedObject<TObject>(string cacheKey, TObject value)
where TObject : class
{
if (value != null)
{
_requestContext.Items[cacheKey] = value;
}
else
{
_requestContext.Items.Remove(cacheKey);
}
}
#endregion
}