C# 特性与属性的区别
在 C# 中,"特性"(Attribute)和"属性"(Property)是两种不同的概念,它们在编程中扮演不同的角色:
-
属性(Property):
- 属性是类或结构的一部分,它提供了一种访问和修改类中私有字段的方式。
- 属性可以有 getter 和 setter 访问器,允许你读取或写入属性值。
- 属性可以用来实现封装,即隐藏对象的内部状态,同时提供受控的访问。
- 属性在类的定义中声明,并且通常与字段(Field)相关联。
- 属性可以有存储机制,即它们可以实际存储数据,或者仅仅是计算数据的逻辑。
例句
public class Person { private string _name; public string Name { get { return _name; } set { _name = value; } } }
-
特性(Attribute):
- 特性是用于为代码元素(如类、方法、属性等)提供元数据的一种机制。
- 特性可以在编译时添加到代码中,并且可以在运行时被检索。
- 特性不包含数据,它们通常用于改变代码的行为,或者为代码提供额外的信息。
- 特性可以是自定义的,也可以是 .NET Framework 提供的内置特性。
- 特性在代码中使用方括号
[]
声明。
例句
[Serializable] public class Person { public string Name { get; set; } }
在这个例子中,
[Serializable]
是一个特性,它指示Person
类可以被序列化。
总结区别:
- 用途:属性用于封装和数据访问,特性用于提供元数据或改变代码行为。
- 存储:属性可以存储数据,特性不存储数据。
- 声明:属性在类内部声明,作为类的成员;特性在类定义的外部声明,作为类的修饰符。
- 运行时:属性的值在运行时可以被访问和修改;特性的信息在运行时可以通过反射(Reflection)被读取。
理解这两者的区别对于正确使用 C# 语言和设计良好的 .NET 应用程序非常重要。