使c#Windows窗体工具公开

使c#Windows窗体工具公开,c#,forms,public,C#,Forms,Public,我只是想知道将Windows窗体工具(如文本框、按钮等)公开是否安全。它在Designer.cs文件中显示为private。我把它改成了public,但它仍然有效,但我很担心,因为有时候弄乱默认设置是我不应该做的事情,即使它有效。将控件上的修饰符改成public——就像将任何其他类上的字段、属性或方法从private改成public是安全的一样。你不会突然发现有什么东西坏了、失败了、锁定了等等。这只是意味着现在可以从表单外部访问控件 但是,控件的默认设置private,有助于鼓励更好的代码设计。

我只是想知道将Windows窗体工具(如文本框、按钮等)公开是否安全。它在Designer.cs文件中显示为private。我把它改成了public,但它仍然有效,但我很担心,因为有时候弄乱默认设置是我不应该做的事情,即使它有效。

将控件上的修饰符改成
public
——就像将任何其他类上的字段、属性或方法从private改成public是安全的一样。你不会突然发现有什么东西坏了、失败了、锁定了等等。这只是意味着现在可以从表单外部访问控件

但是,控件的默认设置
private
,有助于鼓励更好的代码设计。如果您发现需要将控件
公开
,那么您可能没有很好地将表单的关注点与应用程序的其余部分分开,或者至少没有遵循一般社区认为是好的模式

例如,如果需要修改标签的文本,则不需要将标签本身公开为公共。您可以选择创建窗体的公共属性来设置专用标签的文本值。例如,如果您的标签表示表单的副标题:

public string Subtitle { 
   get { return label1.Text; }
   set { label1.Text = value; }
}
更好的是,表单可以侦听来自某个中间对象的事件或通知,并根据这些通知在内部更新标签:

private void someobject_SubtitleChanged(object sender, SubtitleChangedEventArgs args) {
   label1.Text = args.Subtitle;
}

如果你对它成为
公共的风险感到满意(即它是
公共的
,因此任何其他类都可以摆弄它),那就去吧。单个小部件的访问修饰符可以在Designer窗口的Properties(我想)下更改不需要编辑.Deal.C.FieldEnter,在你仔细考虑搜索你想做的根本原因的问题之前,考虑是否已经问过这个问题。有一个几乎100%的可能性是,有一个更好的方法来做任何你想做的事情,而不是公开表单小部件。作为一种妥协,你可以让它们受到保护,这将迫使任何使用它的人在篡改单个控件之前对其进行子类化。这传达了这样一种意图,即控件要从类内部进行操作,但仍然允许高级开发人员具有灵活性。