C# 属性(Property)

  属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作。

  属性(Property)不会确定存储位置。相反,它们具有可读写或计算它们值的 访问器(accessors)。

  例如,有一个名为 Student 的类,带有 age、name 和 code 的私有域。我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性。

  访问器(Accessors)

  属性(Property)的访问器(accessor)包含有助于获取(读取或计算)或设置(写入)属性的可执行语句。访问器(accessor)声明可包含一个 get 访问器、一个 set 访问器,或者同时包含二者。例如:

  // 声明类型为 string 的 Code 属性

  public string Code

  {

  get

  {

  return code;

  }

  set

  {

  code = value;

  }

  }

  // 声明类型为 string 的 Name 属性

  public string Name

  {

  get

  {

  return name;

  }

  set

  {

  name = value;

  }

  }

  // 声明类型为 int 的 Age 属性

  public int Age

  {

  get

  {

  return age;

  }

  set

  {

  age = value;

  }

  }

  实例

  下面的实例演示了属性(Property)的用法:

  using System;

  namespace tutorialspoint

  {

  class Student

  {

  private string code = "N.A";

  private string name = "not known";

  private int age = 0;

  // 声明类型为 string 的 Code 属性

  public string Code

  {

  get

  {

  return code;

  }

  set

  {

  code = value;

  }

  }

  // 声明类型为 string 的 Name 属性

  public string Name

  {

  get

  {

  return name;

  }

  set

  {

  name = value;

  }

  }

  // 声明类型为 int 的 Age 属性

  public int Age

  {

  get

  {

  return age;

  }

  set

  {

  age = value;

  }

  }

  public override string ToString()

  {

  return "Code = " + Code +", Name = " + Name + ", Age = " + Age;

  }

  }

  class ExampleDemo

  {

  public static void Main()

  {

  // 创建一个新的 Student 对象

  Student s = new Student();

  // 设置 student 的 code、name 和 age

  s.Code = "001";

  s.Name = "Zara";

  s.Age = 9;

  Console.WriteLine("Student Info: {0}", s);

  // 增加年龄

  s.Age += 1;

  Console.WriteLine("Student Info: {0}", s);

  Console.ReadKey();

  }

  }

  }

  当上面的代码被编译和执行时,它会产生下列结果:

  Student Info: Code = 001, Name = Zara, Age = 9

  Student Info: Code = 001, Name = Zara, Age = 10

  抽象属性(Abstract Properties)

  抽象类可拥有抽象属性,这些属性应在派生类中被实现。下面的程序说明了这点:

  using System;

  namespace tutorialspoint

  {

  public abstract class Person

  {

  public abstract string Name

  {

  get;

  set;

  }

  public abstract int Age

  {

  get;

  set;

  }

  }

  class Student : Person

  {

  private string code = "N.A";

  private string name = "N.A";

  private int age = 0;

  // 声明类型为 string 的 Code 属性

  public string Code

  {

  get

  {

  return code;

  }

  set

  {

  code = value;

  }

  }

  // 声明类型为 string 的 Name 属性

  public override string Name

  {

  get

  {

  return name;

  }

  set

  {

  name = value;

  }

  }

  // 声明类型为 int 的 Age 属性

  public override int Age

  {

  get

  {

  return age;

  }

  set

  {

  age = value;

  }

  }

  public override string ToString()

  {

  return "Code = " + Code +", Name = " + Name + ", Age = " + Age;

  }

  }

  class ExampleDemo

  {

  public static void Main()

  {

  // 创建一个新的 Student 对象

  Student s = new Student();

  // 设置 student 的 code、name 和 age

  s.Code = "001";

  s.Name = "Zara";

  s.Age = 9;

  Console.WriteLine("Student Info:- {0}", s);

  // 增加年龄

  s.Age += 1;

  Console.WriteLine("Student Info:- {0}", s);

  Console.ReadKey();

  }

  }

  }

  当上面的代码被编译和执行时,它会产生下列结果:

  Student Info: Code = 001, Name = Zara, Age = 9

  Student Info: Code = 001, Name = Zara, Age = 10

  本文转载自:w3cschool

  (编辑:雷林鹏 来源:网络)

雷林鹏分享:C# 属性(Property)的更多相关文章

  1. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建属性网格

    jQuery EasyUI 数据网格 - 创建属性网格 属性网格(property grid)带有一个内置的 expand(展开)/collapse(合并) 按钮,可以简单地为行分组.您可以简单地创建 ...

  2. 雷林鹏分享:XML 属性

    XML 属性 XML元素具有属性,类似 HTML. 属性(Attribute)提供有关元素的额外信息. XML 属性 在 HTML 中,属性提供有关元素的额外信息: 属性通常提供不属于数据组成部分的信 ...

  3. 雷林鹏分享:C# 反射(Reflection)

    C# 反射(Reflection) 反射(Reflection) 对象用于在运行时获取类型信息.该类位于 System.Reflection 命名空间中,可访问一个正在运行的程序的元数据. Syste ...

  4. 雷林鹏分享:C# 特性(Attribute)

    C# 特性(Attribute) 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.您可以通过使用特性向程序添加声明性信息.一个声明 ...

  5. 雷林鹏分享:C# 索引器(Indexer)

    C# 索引器(Indexer) 索引器(Indexer) 允许一个对象可以像数组一样被索引.当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样.您可以使用数组 ...

  6. 雷林鹏分享:CodeIgniter 数据库操作

    在平时项目开发过程中,除了处理那些繁琐的逻辑过程外,还有一个重要的任务就是对数据库的操作处理.这里总结下自己平时使用CI过程中使用的如何对数据库进行操作处理. 在CI框架中,我们一般会把对数据库的操作 ...

  7. 雷林鹏分享:jQuery EasyUI 数据网格 - 设置冻结列

    jQuery EasyUI 数据网格 - 设置冻结列 本实例演示如何冻结一些列,当用户在网格上移动水平滚动条时,冻结列不能滚动到视图的外部. 为了冻结列,您需要定义 frozenColumns 属性. ...

  8. 雷林鹏分享:jQuery EasyUI 数据网格 - 动态改变列

    jQuery EasyUI 数据网格 - 动态改变列 数据网格(DataGrid)列可以使用 'columns' 属性简单地定义.如果您想动态地改变列,那根本没有问题.为了改变列,您可以重新调用dat ...

  9. 雷林鹏分享:jQuery EasyUI 数据网格 - 格式化列

    jQuery EasyUI 数据网格 - 格式化列 以下实例格式化在 easyui DataGrid 里的列数据,并使用自定义列的 formatter,如果价格小于 20 就将文本变为红色. 为了格式 ...

随机推荐

  1. Azkaban学习笔记(二)

    官方文档:http://azkaban.github.io/ 一.Azkaban主要的组成: 1. 关系型数据库——MySQL 2. AzkabanWebServer 3. AzkabanExcuto ...

  2. mustache语法

    mustache 模板,用于构造html页面内容.在实际工作中,当同一个模板中想要调用不同的函数来渲染画面,在已经自定义好了的前提下,可以在渲染页面时对传入的参数进行手动判断.  以下是学习笔记内容: ...

  3. 我是怎么样和Linux结缘并通过红帽RHCE认证的

    我高考完当时就是选择的计算机科学与技术专业,上大学以后联想到的和计算机相关的就只有写代码,开发,网站,网页设计,就没有其他的了,当时学习写代码也都是在Windows上,什么C#.C++之类的?大约在大 ...

  4. 实用的4~20mA输入/0~5V输出的I/V转换电路(转)

    源: 实用的4~20mA输入/0~5V输出的I/V转换电路

  5. zabbix zabbix_agentd.conf详解

    # This is a config file for the Zabbix agent daemon (Unix) # To get more information about Zabbix, v ...

  6. DTMF在VOIP中的解决方案

    双音多频DTMF(Dual Tone Multi-Frequency)信令,因其提供更高的拨号速率,迅速取代了传统转盘式电话机使用的拨号脉冲信令.DTMF也应用在交互式控制中,诸如语言菜单.语言邮件. ...

  7. ubuntu下交叉编译imagemagick

    环境:ubuntu16.04 交叉编译器版本号:4.8.3 在编译之前要编译以下其依赖的软件或库:freetype,libpng,libxml2,libtiff,libjpeg,zlib,graphv ...

  8. CodeCombat最后一题GridMancer

    http://codecombat.com/play/level/gridmancer 刚开始没看懂,题目,后来才慢慢看懂的, 题目要求,用最少的矩形框填充空白的地方 var grid = this. ...

  9. attr返回被选元素的属性值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. yarn虚拟cpu和虚拟内存

    虚拟cpu 虚拟的cpu代码并发数,如果一个container拥有2个vcpu,那么该container就可以真正的在同一时间运行两个线程,而不是靠切时间片而达到的逻辑并发.所以一般虚拟的cpu需要和 ...