特性 (计算机科学)

计算机科学中，特性（）是一种规格，用于定义对象、元素或文件的属性（property），它也常被译作“属性”。也用作指向这样的实例或给实例设置值（即特性可以读写访问）。特性可以更准确地理解为元数据。 特性通常是属性的属性（property of a property）。但在实际使用中，依所讨论的技术领域不同，特性与属性可等价地混为一谈。对象的特性通常是名字与值组成；元素的特性通常是类型或类名；文件的特性通常是文件名与扩展名。

各领域的用法
如果一个元素被视作另一实体（例如CUSTOMER）的一个属性（property，例如CUSTOMER_NAME)，则这个元素自身可以有零或多个特性attributes（或属性properties) ，如CUSTOMER_NAME可有TYPE = "KINDOFTEXT"。

C#
C#语言中，特性是元数据，附加于字段或代码块，如(assemblies)、成员变量、数据类型，等价于Java注解。编译器与反射式编程可访问特性。

开发者可以决定把特性作为元数据，专门用于表示与给定应用程序，类和成员有关的，与实例无关的各类信息。开发者也可以决定把一些特性暴露为属性（properties），用作更大的应用程序框架的一部分。

特性可以实现为类（派生自System.Attribute）。可用作CLR服务，比如COM互操作、remoting、序列化，可在运行时查询。

下例在C#中定义特性:

[Obsolete("Use class C1 instead", IsError = true)]  // causes compiler message saying
public class C {...}                                // that C is obsolete

public class ObsoleteAttribute: Attribute {         // class name ends with "Attribute"
  public string Message{ get; }                     // but can be used as "Obsolete"
  public bool IsError{ get; set; }
  public ObsoleteAttribute() {...}
  public ObsoleteAttribute(string msg) {...}
  public ObsoleteAttribute(string msg, bool error) {...}}

[Obsolete]
[Obsolete("This is obsolete")]
[Obsolete("This is obsolete", false)]
[Obsolete("This is obsolete", IsError = false)]

位置参数如上例中的string类型首参，是特性类的构造函数的实参。具名参数，如上例中的Boolean实参，是特性类的属性（property）。

HTML & JavaScript
当一个checkbox变化时，显示被checked的特性与属性：

<!doctype html>
<html lang="en">
<head>
<body>
<input name="food" type="meal" id="meal">
  <meta charset="utf-8">
  <title>attr demo</title>
  <style>
  p { border;1px solid black;
font-family; arial, sans-serif;
text-align center;
  }
  b {
    color: blue;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<input id="check1" type="checkbox" checked="checked">
<label for="check1">Check me</label>
<p></p>
 
<script>
$( "input" )
  .change(function() {
    var $input = $( this );
    $( "p" ).html( ".attr( 'checked' ): <b>" + $input.attr( "checked" ) + "</b><br>" +
      ".prop( 'checked' ): <b>" + $input.prop( "checked" ) + "</b><br>" +
      ".is( ':checked' ): <b>" + $input.is( ":checked" ) + "</b>" );
  })
  .change();
</script>
</body>
</html>

点击前
.attr( 'checked' ): checked
.prop( 'checked' ): false
.is( ':checked' ):  false

点击后
.attr( 'checked' ):   checked
.prop( 'checked' ):    true
.is( ':checked' ):     true

多值数据库
许多非关系型数据库或数据库系统，表对应于文件，行对应于item，列对应于特性。

XML
XML中，一个特性是一种标记结构，由名字/值对组成，存在于一个start-tag或empty-element tag中。

参见
 键值对
 文件属性 
 扩展文件属性
 字段
 属性 (编程) 
 元数据

参考文献

计算机编程