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. Bus,Exclusive access,memory attribute

    指令LDREX,STREX是在armv6中新加的指令,配合AMBA3--AXI中的lock[1:0]信号. 在Atomic Access一节中是这么规定的:ARLOCK[1:0]/AWLOCK[1:0 ...

  2. 《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》

    Kalchbrenner’s Paper Kal的这篇文章引用次数较高,他提出了一种名为DCNN(Dynamic Convolutional Neural Network)的网络模型,在上一篇(Kim ...

  3. Java设计模式应用——桥接模式

    性能管理系统中,数据产生后需要经过采集,汇聚,入库三个流程,用户才能查询使用. 采集可以是snmp采集,也可以是ems采集:汇聚可以使storm汇聚,也可以是spark汇聚:入库可以是hdfs入库,也 ...

  4. js 内置对象和方法 示例

    JS内置函数不从属于任何对象,在JS语句的任何地方都可以直接使用这些函数.JS中常用的内置函数如下: 1.eval(str)接收一个字符串形式的表达式,并试图求出表达式的值.作为参数的表达式可以采用任 ...

  5. QQ群免IDKEY加群PHP源码

    加群链接需要idkey的,该源码自动解析idkey,实现免idkey加群. 该源码来自彩虹秒赞系统. 例如:api.yum6.cn/qqun.php?qun=463631294 <?php /* ...

  6. 业余时间正在开发一个REACT小视频站点

    业余时间正在开发一个REACT小视频站点,数据接口来源于吐槽弹幕网(C站),供C站用户移动端的观看.因现存在移动网络屏蔽C站的关系,最好使用非移动网络进行观看.否则会比较卡,影响用户体验. 站点测试入 ...

  7. Window系统远程连接Linux服务器(非桌面系统)

    Window系统远程连接Linux服务器(非桌面系统) Window系统远程连接Linux服务器(非桌面系统),步骤: 第一步:下载Xshell远程登录软件:第二步:设置Linux服务器的IP.端口. ...

  8. 08: CORS实现跨域请求

    目录: 1.1 cors跨域请求介绍 1.2 使用tornado实现 复杂请求 1.3 Django中使用django-cors-headers解决跨域问题 1.1 cors跨域请求介绍返回顶部 1. ...

  9. UVa 10285 Longest Run on a Snowboard - 记忆化搜索

    记忆化搜索,完事... Code /** * UVa * Problem#10285 * Accepted * Time:0ms */ #include<iostream> #includ ...

  10. List集合实现简易学生管理

    题目: 代码: package org.wlgzs; import java.util.ArrayList; import java.util.List; import java.util.Scann ...