[英]Why aren't WPF controls private by default?
在WPF中,寫作
<TextBlock x:Name="foo"/>
將控制public
。 要使其成為private
,必須明確指定FieldModifier
:
<TextBlock x:Name="foo" x:FieldModifier="private"/>
我覺得這很奇怪。 我不認為直接從課外訪問子控件是一種很好的編碼風格。 例如,我會避免寫作
var muc = new MyUserControl();
muc.foo.Text = "foo";
相反,我會寫一個公共方法並使用它:
public void SetFooText(string text) { foo.Text = text; }
// in somewhere else
var muc = new MyUserControl();
muc.SetFooText("foo");
或寫一個公共財產
public string FooText
{
get { return foo.Text; }
set { foo.Text = value; }
}
// in somewhere else
var muc = new MyUserControl();
muc.FooText = "foo";
所以,我沒有看到默認情況下將控件設置為public
的任何優點。 如果private
是默認的,就像C#中的所有東西一樣,也許會更安全。
為什么public
默認?
好吧,我搞錯了。 默認是internal
正如其他人提到的那樣。 但是為什么它不是private
的問題仍在等待答案。
C#的默認值:C#的FieldModifier是NotPublic(內部)
TypeAttributes.NotPublic是默認行為,因為編譯XAML的程序集外部的代碼很少需要訪問XAML創建的元素。 WPF安全體系結構與XAML編譯行為一起不會聲明將元素實例存儲為公共的字段,除非您專門設置x:FieldModifier以允許公共訪問。
正如我們所看到的那樣,默認情況下它們是私有的,編譯XAML的程序集將無法訪問XAML創建的元素。
您可以在MSDN中找到更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.