簡體   English   中英

為什么默認情況下WPF控件不是私有的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM