如何从 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;。我假设您的真实代码在该方法中有某种等待。