如何从 C# 中的 class 库访问受保护的方法
How to access Protected methods from a class library in c#
我有一个库,其中有一个受保护的方法,其定义如下:
public class InvokeCalc : IInvokeCalc
{
protected InvokeCalc(OtherClass comm);
public OtherClass();
}
我已将此库添加为我的 .net core 3.1 控制台应用程序中的参考。
这是我写的:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
SampleDAL dal = new SampleDAL();
dal.Trigger();
}
}
public class SampleDAL
{
IInvokeCalc app = null;
public async void Trigger()
{
OtherClass comm = new OtherClass();
app = new InvokeCalc(comm); // error
Console.ReadLine();
}
}
此代码抛出错误:
InvokeCalc.InvokeCalc(string) is not accessible due to its protection
level.
我在其他一些答案中看到,如果我们继承 InvokeCalc class ,我们可以使用其受保护的方法。
为此,我将 SampleDAL 的定义更改为如下:
public class SampleDAL : InvokeCalc // Inherited InvokeCalc class
{
IInvokeCalc app = null;
public async void Trigger()
{
OtherClass comm = new OtherClass();
app = new InvokeCalc(comm);
Console.ReadLine();
}
}
这样做会产生额外的错误:
InvokeCalc doesnt contain a constructor that takes 0 arguments.
现在我不确定如何进一步进行,在这种情况下的任何指导都会非常有帮助。
您绝对应该与作者讨论如何使用 class。
也就是说,您缺少构造函数:
public class SampleDAL : InvokeCalc // Inherited InvokeCalc class
{
public SampleDAL(OtherClass comm) : base(comm)
{
}
IInvokeCalc app = null;
public async Task Trigger()
{
OtherClass comm = new OtherClass();
app = new SampleDAL(comm);
await Task.CompletedTask;
Console.ReadLine();
}
}
这将编译,但它是否真的有效很大程度上取决于基础 class 的预期行为,以及 OtherClass
应该如何工作。
另请注意,您编写的代码无法编译 - public OtherClass();
行不正确。我假设这是一个 copy-paste 错误。
此外,您对 Trigger()
的实现被声明为 async Task
但没有任何等待,所以我放入了 await Task.CompletedTask;
。我假设您的真实代码在该方法中有某种等待。
我有一个库,其中有一个受保护的方法,其定义如下:
public class InvokeCalc : IInvokeCalc
{
protected InvokeCalc(OtherClass comm);
public OtherClass();
}
我已将此库添加为我的 .net core 3.1 控制台应用程序中的参考。
这是我写的:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
SampleDAL dal = new SampleDAL();
dal.Trigger();
}
}
public class SampleDAL
{
IInvokeCalc app = null;
public async void Trigger()
{
OtherClass comm = new OtherClass();
app = new InvokeCalc(comm); // error
Console.ReadLine();
}
}
此代码抛出错误:
InvokeCalc.InvokeCalc(string) is not accessible due to its protection level.
我在其他一些答案中看到,如果我们继承 InvokeCalc class ,我们可以使用其受保护的方法。
为此,我将 SampleDAL 的定义更改为如下:
public class SampleDAL : InvokeCalc // Inherited InvokeCalc class
{
IInvokeCalc app = null;
public async void Trigger()
{
OtherClass comm = new OtherClass();
app = new InvokeCalc(comm);
Console.ReadLine();
}
}
这样做会产生额外的错误:
InvokeCalc doesnt contain a constructor that takes 0 arguments.
现在我不确定如何进一步进行,在这种情况下的任何指导都会非常有帮助。
您绝对应该与作者讨论如何使用 class。
也就是说,您缺少构造函数:
public class SampleDAL : InvokeCalc // Inherited InvokeCalc class
{
public SampleDAL(OtherClass comm) : base(comm)
{
}
IInvokeCalc app = null;
public async Task Trigger()
{
OtherClass comm = new OtherClass();
app = new SampleDAL(comm);
await Task.CompletedTask;
Console.ReadLine();
}
}
这将编译,但它是否真的有效很大程度上取决于基础 class 的预期行为,以及 OtherClass
应该如何工作。
另请注意,您编写的代码无法编译 - public OtherClass();
行不正确。我假设这是一个 copy-paste 错误。
此外,您对 Trigger()
的实现被声明为 async Task
但没有任何等待,所以我放入了 await Task.CompletedTask;
。我假设您的真实代码在该方法中有某种等待。