![](/img/trans.png)
[英]how to access public methods from a C# class library in javascript(rhino)
[英]How to access Protected methods from a class library in c#
我有一个库,其中有一个受保护的方法,其定义如下:
public class InvokeCalc : IInvokeCalc
{
protected InvokeCalc(OtherClass comm);
public OtherClass();
}
我在我的 .net 核心 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) 由于其保护级别而无法访问。
我在其他一些答案中看到,如果我们继承 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 不包含采用 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();
}
}
这将编译,但它是否真的有效取决于基类的预期行为,以及OtherClass
应该如何工作。
另请注意,您编写的代码不会编译 - public OtherClass();
是不正确的。 我假设这是一个复制粘贴错误。
此外,您的Trigger()
实现被声明为async Task
但缺少任何等待,因此我放入了await Task.CompletedTask;
. 我假设您的真实代码在该方法中有某种可等待的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.