【问题标题】:custom properties or special attribute or is this a pattern?自定义属性或特殊属性,或者这是一种模式?
【发布时间】:2013-08-27 12:29:57
【问题描述】:

我想弄清楚他们在这里使用的是什么编程技术。正如您所见,“Class AAA”有一个名为“MessageInfo”的类型类属性。我需要知道这是“自定义属性”还是一种特殊属性。

我尝试通过研究和阅读不同的书籍,但我仍然很困惑。

public class AAA
{
    public BBB MessageInfo { get; set; }

    object.MessageInfo.text = "xxxxx";
}

public class BBB
{
    // text here... 
}

【问题讨论】:

  • 我对你在问什么感到困惑。您显示的代码无法编译,所以我不明白令人困惑的部分是什么。该物业本身看起来非常普通。
  • 什么让你困惑?
  • object.MessageInfo.text = "xxxxx"; 无效,因为object 不包含名为MessageInfo 的成员,也不能这样做,因为object 内置在.NET 中并且无法更改。我怀疑那条线不应该在那里。

标签: c# properties attributes encapsulation


【解决方案1】:

来自C# Language Specification,第 10.7 节:

属性是提供对对象或类的特征的访问的成员。属性的示例包括字符串的长度、字体的大小、窗口的标题、客户的姓名等。属性是字段的自然扩展——两者都是具有关联类型的命名成员,访问字段和属性的语法是相同的。但是,与字段不同,属性不表示存储位置。相反,属性具有指定在读取或写入其值时要执行的语句的访问器。因此,属性提供了一种将动作与对象属性的读取和写入相关联的机制;此外,它们允许计算此类属性。

单击链接,下载规范,导航到第 10.7 节,并将其添加到您的阅读列表中。

【讨论】:

    【解决方案2】:

    我需要知道这是“自定义属性”还是某种特殊属性。

    这是一个属性。

    In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. They also enable client code to create objects. When you declare a property as you have in your example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

    类似的东西

    private BBB _bbb;
    public BBB MessageInfo 
    { 
    get{ return _bbb;}
    set{_bbb= value;} 
    }
    

    【讨论】:

      【解决方案3】:

      这只是一个 BBB 类的属性object.MessageInfo.text 中的 .text 实际上表示 BBB 类中的另一个 Public 属性。

      您可以查看这篇关于 C# 属性的 MSDN 文章或这篇 ONE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 2017-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多