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代码。