C#本身是否有附加属性?

C#本身是否有附加属性?,c#,wpf,C#,Wpf,在C#本身中,是否有类似于WPF中使用的“附加属性”的东西?我认为您考虑的是getter和setter 它们是这样创建的: public class Person { //default constructor public Person() { } private string _Name; public string Name { //set the person name set {

在C#本身中,是否有类似于WPF中使用的“附加属性”的东西?

我认为您考虑的是getter和setter

它们是这样创建的:

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; }
    }
}
更多关于他们是如何工作的:

AttachedProperties是.NET Framework的一部分,而不是C语言规范的一部分,特别是System.Activities.Presentation.Model命名空间的一部分,该命名空间特定于WPF。

在WPF中,附加属性允许您执行以下操作:

<TextBlock Grid.Row="2" Text="I know nothing about grids!" />
能够做到这一点:

var tb = new TextBlock();
tb.Grid.Row = 2; // this line would not compile
为了实现这一点,您需要将
网格
对象传递到TextBlock类中:

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

    public TextBlock(Grid grid)
    {
        Grid = grid;
    }
}
但我不认为有任何东西可以直接等同于WPF中附加属性的工作方式。你需要手工制作


你想实现什么?

简短的答案是否定的。稍长一点的答案是,这是一个有点不幸的故事。我们为C#4设计了“扩展属性”,并在实现(但不是测试)它们时意识到,哦,等等,我们设计的东西与WPF风格的属性并不真正兼容。我们没有重新设计和重新实现该功能,而是最终对其进行了裁剪

更长的版本如下:


您可以使用该类将任意状态附加到实例。您可以将它与扩展方法结合起来创建一种形式的,但不幸的是,没有在C#中使用好的属性语法。

您所说的“在C#本身”是什么意思?C#是一种语言规范,它怎么可能有“附加属性”?这个问题没有任何意义。@EdS语言规范怎么可能有“附加属性”?通过将其包括在规范中,是否?这个问题怎么没有意义?我似乎很清楚。答案是否定的事实并不意味着它是荒谬的或“不是一个真正的问题”。@Martinho Fernandes:这很公平。我想如果语言规范是在那个级别实现的(比如属性),那么它就可以调用。我想你是说扩展方法,但是属性?不幸的是,目前还没有。这个问题不应该以“不是一个真正的问题”来结束。我们考虑在C#4.0中添加类似WPF风格的“附加属性”,因此询问该语言是否支持它是一个非常明智的问题。这个问题不是模棱两可、含糊不清、不完整、宽泛或修辞性的,并且可以以当前形式合理地回答(用“否”)。我敢打赌,这个问题是指
系统.Windows
中的
DependencyProperty
DependencyObject
,而不是
系统.Activities.Presentation.Model
(看起来像WF stuff)
public class TextBlock
{
    public string Text { get; set; }
    public Grid Grid { get; set; }

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