2010-09-09 90 views

回答

4

属性被用于声明性编程模型

属性不会强制使用任何功能(除非开箱即用)。 对于开箱即用的属性,请阅读msdn上的文档。对于你自己的属性,你需要编写代码,如果一个类/方法等有一个属性。

我不认为属性是动态添加的。它们是动态读取的。 它们是元数据,因此在编译时添加。检查此:Can attributes be added dynamically in C#?

自定义属性是那些你创建和标记你的类与。要创建一个属性,您需要创建一个从System.Attribute继承的类(对于属性)。检查:http://msdn.microsoft.com/en-us/library/sw480ze8.aspx

9
  1. 属性是为了增加约一类,功能更多的信息,等等。有时编译器做特别的事情,当他们看到的属性。程序运行时,库的其他属性会被库查看。

  2. 首先查看所需功能的文档。它应该列出哪些属性是必要的。

  3. 否。属性只能在代码编译之前应用。

  4. 这只是您自己创建的一个属性,而不是.NET自带的属性。

1

属性用于提供有关类中的类,方法,属性和事件的元数据。

一些最常用的属性用于告知设计师有关类中属性的信息,如BrowsableDescription。这个元数据然后被PropertyGrid使用。属性的其他示例可能是序列化期间使用的SerializableObsolete属性或将代码元素标记为废弃。

通过使用[AttributeName(parameter1,...)]语法,可以将属性添加到类,属性,方法和事件中。

自定义属性是指派生自System.Attribute的属性,它们不是.NET框架中的标准属性。

3

属性用于元编程。元编程可帮助您在运行时通过代码实现活力。假设你的班级中有10个道具,并且你只想读某些特定的道具,为此你会对这些道具应用一些特殊的属性,并且在运行时通过反射你会要求只过滤那些给予特殊道具的道具属性,然后在这些道具上执行你的工作。这只是一个例子。

在我们的案例中,我们有属性驱动验证框架。所以如果想要道具。在将对象保存到数据库之前不要留空,我们将它标记为NotNullOrEmpty属性,并且基类将有一个方法Validate(),它将在将对象保存到数据库之前调用。 Validate()方法将过滤obj。道具。使用Validatable属性并在违反验证的情况下执行验证并抛出异常。

+0

很好的解释和例子,我只是有这样的情况下,现在,所以谢谢! – greenoldman 2010-09-09 06:45:25

6

当你写你的代码时,你回答“什么?”问题:

  1. 该怎么办? (方法)
  2. 要存储什么? (字段和属性)
  3. 什么是什么? (类层次结构)

等属性为此问题添加另一个维度。他们回答“如何?”题。并回答“如何?”问题可能对IDE是重要的,

[Browsable(false)] 
public string NotImportantField { get; set; } // property which will not be displayed in VS 

编译器

[ThreadStatic] 
private static RequestContext context; // field which will be different for every thread 

或用于经由反射分析你的另一代码。

[XmlIgnore] 
public string NotSerializableField { get; set; } // property which will not be xml-serialized 

你可能要定义自定义属性,如果你的组件类,字段,方法等进行分析或通过反射调用(通常是例如与控制容器和方面 - 反转的情况下,面向对象编程)。这样的属性可能(并且通常是唯一的方式)指示调用者或分析器根据这种属性存在或其属性而表现不同。

关于你的第一个问题,那么,我们如何知道哪种方法需要特定的结果?作为一名.NET开发人员的优势之一是,一切都被记录得非常彻底。 :)当你想指定某一种约束到您的编程语句

0

属性用于:

Exapmple:

[StructLayout(LayoutKind::Sequential)] 
value struct Point 
{ 
public: 
    int x; 
    int y; 
}; 

以上您所定义的结构应该是连续的。

另一个例子是:

[DllImport("user32.dll",CallingConvention=CallingConvention::StdCall)] 

这里你指定要导入使用的DllImport使用属性的DLL。我希望你能够找出属性的用途。

现在如何知道在什么时候使用哪些属性以及哪些功能与您学习函数,委托和事件...相同的时间并使用它。也有很多人可能会为你回答相同的问题。

0

如果您想要一个非常有用的示例,其中可以使用哪些属性以及如何执行反射代码以访问它们,请检查Enum ToString。使用代码,就很容易将ComboBox绑定到枚举有类型安全的选择,以及漂亮的人类可读的描述:

public static void ComboItemsFromEnum<EnumType>(ComboBox combobox) where EnumType : struct 
{ 
    combobox.FormattingEnabled = true; 
    foreach (object enumVal in System.Enum.GetValues(typeof(EnumType))) 
    { 
     combobox.Items.Add(enumVal); 
    } 
    combobox.Format += delegate(object sender, ListControlConvertEventArgs e) 
    { 
     e.Value = GetDescription<EnumType>(e.Value); 
    }; 
} 
相关问题