C# “如何修复”;由于其保护级别而无法访问”;winform中的错误?

C# “如何修复”;由于其保护级别而无法访问”;winform中的错误?,c#,.net,winforms,C#,.net,Winforms,我有一节形式课 partial class ProgressMainForm : Form { public ProgressMainForm() { InitializeComponent(); } } 然后是一个使用该类并包含用户所有功能的类 public class ProgressForm { public ProgressMainForm myProgressForm;

我有一节形式课

    partial class ProgressMainForm : Form
    {
      public ProgressMainForm()
      {
        InitializeComponent();
      }
    }
然后是一个使用该类并包含用户所有功能的类

    public class ProgressForm
    {
        public ProgressMainForm myProgressForm;

        public ProgressForm(string title)
        {
            myProgressForm = new ProgressMainForm();
            myProgressForm.Text = title;
        }

        public void SetProgressBar(int min, int max)
        {
        ....
    }
然后我在我的项目中使用这个ProgressForm类,如下所示

            progresswindow = new ProgressForm("Replacing All Strings");
这样
progresswindow
只包含与
ProgressForm
功能相关的成员,所有这些表单成员都对用户隐藏

但有时我需要访问这些表单成员,例如当我需要
Invoke
方法时

是否有一种方法可以让用户在不公开
ProgressMainForm
的情况下访问
myProgressForm


或者这种方法是错误的?

您可以将方法声明为,这将允许您从程序集中调用方法

有没有一种方法可以让ProgressForm中的myProgressForm在不公开ProgressMainForm的情况下供用户访问

是的,您可以在
ProgressForm
上创建一些公开
ProgressMainForm
特定属性的公共属性

private ProgressMainForm myProgressForm;

public int SomeProperty
{
  get { return myProgressForm.IntProp; }
  set { myProgressForm.IntProp = value; }
}

对于只读属性,请省略
,对于属于引用类型的任何类型,您可能希望返回克隆或副本(以确保客户端无法更改它)。

包装或公开所需的方法。但不知何故,我不喜欢这种方法,限制访问不是一个坏主意,但不应该是这种抽象的全部目的。尽量使访问更容易,而不是限制性的。

在我看来,您不应该直接使用表单。如果我正确阅读了您的设置,您希望在完成某些工作时显示进度指示器。ProgressForm应该公开设置计数器并递增计数器的方法;当您在另一个线程上运行它时,表单操作应该从ProgressForm的方法内部完成。您的调用属于那里,用合适的方法包装。如果要更改ProgressMainForm的某些可视属性,请将这些属性中继到ProgressForm


要继续,调用代码除了设置进度边界、开始、设置当前百分比和停止之外,不应该知道ProgressForm做了什么。这样,如果您被要求将应用程序移植到另一个UI系统,则需要更改的代码量将大大减少。

我认为他希望在ProgressForm中标记要公开的表单方法,internal显然不起作用,因为他需要更改WinForms代码。