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. UVM中的factory机制实现

    首先在Systemverilog中便有对于重载的最基本的支持. 1)定义task/function时,使用virtual关键字.那之后在test_case中调用时,便使用句柄指向的对象的类型而不是句柄 ...

  2. Linux root用户下不能打开Google-chrome的解决办法

    在root下打开chrome会出现no sandbox的错误 解决方案: 1.找到google-chrome文件 在目录/opt/google/chrome 下 2.使用gedit打开该文件 最后一行 ...

  3. uva10003

    /* 2014.3.6 这题说的是给你了一根木棒 然后 n 个点(线段上的点) 然后计算 在这 n个点上都切下去的 最小花费 举个例子 100 3 25 50 75 如果 从 25 开始切 然后切 5 ...

  4. linux常用命令:crontab 命令

    前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...

  5. mysql合并 两个count语句一次性输出结果的方法

    mysql合并 两个count语句一次性输出结果的方法 需求场景:经常要查看有两个表统计数,用SELECT COUNT(*) FROM hotcontents,SELECT COUNT(*) FROM ...

  6. php array 根据value获取key,in_array()判断是否在数组内实例

    php array 根据value获取key,in_array()判断是否在数组内实例 <?php header("Content-type: text/html; charset=u ...

  7. java使用反射给对象属性赋值的两种方法

    java反射无所不能,辣么,怎么通过反射设置一个属性的值呢? 主程序: /** * @author tengqingya * @create 2017-03-05 15:54 */ public cl ...

  8. PHP发送HTTP请求的6种方法

    方法1: 用 file_get_contents 以get方式获取内容: <?php$url = 'https://wenda.shukaiming.com/';echo file_get_co ...

  9. Kali配置网络

    虚拟机NAT网关:192.168.50.1 主机VM8网址:192.168.50.2 虚拟机网卡:192.168.50.30 vim /etc/network/interfaces # The loo ...

  10. 20144303石宇森 《网络对抗》 WEB基础实践

    20144303石宇森 <网络对抗> WEB基础实践 实验后回答问题 一.什么是表单 表单是一个包含表单元素的区域.用form来定义. HTML是静态显示网页的,无法跟服务器进行交互,所以 ...