簡體   English   中英

C#本身附有財產嗎?

[英]Is there attached property in C# itself?

在C#本身,WPF中是否有類似“附加屬性”的東西?

最簡潔的答案是不。 稍微長一點的答案是,這是一個不幸的故事。 我們為C#4設計了“擴展屬性”,當我們意識到,哦,等等,我們設計的東西與WPF風格的屬性並不真正兼容時,就實現了(但沒有測試)它們。 我們最終削減了它,而不是重新設計和重新實現該功能。

更長的版本在這里:

http://blogs.msdn.com/b/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx

AttachedProperties是.NET Framework的一部分,不是C#語言規范的一部分,特別是System.Activities.Presentation.Model命名空間的一部分,它是WPF特定的。

在WPF中,附加屬性允許您執行以下操作:

<TextBlock Grid.Row="2" Text="I know nothing about grids!" />

這就像將C#中的類定義為:

public class TextBlock
{
    public string Text { get; set; }
}

能夠做到這一點:

var tb = new TextBlock();
tb.Grid.Row = 2; // this line would not compile

為了使這項工作,您需要將Grid對象傳遞到TextBlock類:

public class TextBlock
{
    public string Text { get; set; }
    public Grid Grid { get; set; }

    public TextBlock(Grid grid)
    {
        Grid = grid;
    }
}

但我認為沒有任何東西直接等同於附加屬性在WPF中的工作方式。 你需要手工制作它。

你想達到什么目的?

您可以使用ConditionalWeakTable<TKey, TValue>類將任意狀態附加到實例。 您可以將它與擴展方法結合使用以創建擴展屬性的形式,但遺憾的是沒有在C#中使用nice屬性語法。

我想你在考慮吸氣劑和制定者。

它們是這樣創建的:

public class Person
{
    //default constructor 
    public Person()
        {
        }

    private string _Name;
    public string Name
    {
        //set the person name
        set { this._Name = value; }
        //get the person name 
        get { return this._Name; }
    }
}

有關它們如何在這里工作的更多信息: http//msdn.microsoft.com/en-us/library/aa287786(v = vs.71).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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