属性

using System;
namespace runoob
{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 和 ages.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();}}
}

上述代码是关于属性的例子。

属性:
属性是对于类中域的扩展,也就是为了给我们提供一个可以修改field的方法。

通过get { return age; }实现读操作。
通过set { age = value; }实现写操作。
value是通过使用访问器附的值。

那么我在学习过程中有一个疑问,为什么需要规定这么复杂的事情,我直接把想读写的领域不设置为私有,外界随意访问不就好了?

首先,我们通过访问器,即属性对领域设置为只读操作,或者只写操作,或者读写都可以。毫无疑问这在实际应用中有着非常大的需求,很多字段可能只其中一个需求,因此我们可以通过只定义一个方法来保证需求

其次,属性很好的保证了面向对象的思想,不可以对字段进行随意的改动,而是通过方法修改字段,实现与外界的隔离。

索引器

索引器的概念和属性类似,也是通过定义setget访问器来使用的。
不同的是,在属性的基础上,可以操作更加详细的数据,不一定是类中的某个成员。

using System;
namespace IndexerApplication
{class IndexedNames{private string[] namelist = new string[size];static public int size = 10;public IndexedNames(){for (int i = 0; i < size; i++)namelist[i] = "N. A.";}public string this[int index]{get{string tmp;if( index >= 0 && index <= size-1 ){tmp = namelist[index];}else{tmp = "";}return ( tmp );}set{if( index >= 0 && index <= size-1 ){namelist[index] = value;}}}static void Main(string[] args){IndexedNames names = new IndexedNames();names[0] = "Zara";names[1] = "Riz";names[2] = "Nuha";names[3] = "Asif";names[4] = "Davinder";names[5] = "Sunil";names[6] = "Rubic";for ( int i = 0; i < IndexedNames.size; i++ ){Console.WriteLine(names[i]);}Console.ReadKey();}}
}

它通过[]来索引得到类中的某个信息。实现如上述代码。总的看起来,索引器的实现很像是把类当成了一个字典。return的内容是值,类型是定义方法的返回类型,键就是定义的索引器传入的值和类型,当作理解。

同样,value是通过等号右边的值来获得的。

C# 属性、索引器(二)相关推荐

  1. 【笔记】《C#高效编程改进C#代码的50个行之有效的办法》第1章C#语言习惯(1)--属性的特性以及索引器(SamWang)...

    ************************************************************************** 书名:<C#高效编程改进C#代码的50个行之 ...

  2. C#语法小知识(六)属性与索引器

    属性是一种成员,它提供灵活的机制来读取.写入或计算私有字段的值. 属性可用作公共数据成员,但它们实际上是称为"访问器"的特殊方法. 这使得可以轻松访问数据,还有助于提高方法的安全性 ...

  3. c#初学-索引器get和set的使用(泛型类)

    索引器允许类或结构的实例就像数组一样进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数. 在下面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 访问器方法(作为分配和检索 ...

  4. C#锐利体验-第八讲 索引器与操作符重载(转)

    第八讲 索引器与操作符重载 南京邮电学院 李建忠(cornyfield@263.net) 索引 C#锐利体验 "Hello,World!"程序 C#语言基础介绍 Microsoft ...

  5. 读CLR via C#总结(9) 索引器(有参属性)

    索引器,即访问器接受参数的属性.在C#中是以数组风格的语法来公开索引器的.所以这使得对象可按照与数组相似的方式进行索引. 一,定义索引器 internal class IndexerTest<T ...

  6. C#索引器与属性的区别、索引器的具体使用

    C#中索引器和属性类似,但也有一些区别: a.    属性可以调用方法就如同他们是公共数据成员,而索引器可以调用对象上得方法,如同对象是一个数组. b.    属性可以通过简单的名称访问, 而索引器需 ...

  7. java类中定义索引器,C#面向对象基础——字段、属性和索引器

    关于面向对象编程,在很多语言里面都出现过,最常用的如java和c++, C#语言关于面向对象编程的规范,我觉得介于上面两者之间,我的理解是它比较偏向c++,或许是因为跟它的析构函数有关系,像java有 ...

  8. C#索引器-索引器和属性的区别

    属性和索引器的差别:一个对象只有一个属性值,所以要存放多个值必须实例化多个对象(通常情况下,实例化一个数组的对象,接着实例化的对象赋给这个数组).一个对象对应的索引是一个数组,并且可以存放多个数值或字 ...

  9. Solid Edge 二次开发插件 ProkitAddIn 属性管理器

    Solid Edge 二次开发插件 ProkitAddIn 属性管理器 特点: 涵盖与Solid Edge自带的"属性管理器"的基本功能. 额外增加外部数据(具有关联关系的数据,或 ...

最新文章

  1. 动态加载用户控件的怪问题
  2. ​网页图表Highcharts实践教程之图表代码构成
  3. 如何安全设置无线路由
  4. Sql Server之旅——第十一站 简单说说sqlserver的执行计划
  5. python有内存处理模块吗_使用Python多处理的高内存使用
  6. 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - H. 四平方和
  7. 1小时搞懂设计模式之委派模式
  8. mybatis扩展ResultMap
  9. 高效Redis Client多线程操作的并发吞吐设计
  10. Tomcat安装之前为什么要安装JDK
  11. PHP代码更新后画面不更新,为什么我的PHP代码不能更新SQL
  12. Linux设置bypass网卡,Linux pwn入门教程(7)——PIE与bypass思路
  13. 怎样进行文献调研?——与青年朋友谈科研(7)
  14. Web_php_unserialize,XCTF-Web_php_unserialize
  15. 小班安全使用计算机教案,幼儿园小班安全教案(精选5篇)
  16. 7年弹指一挥间:iOS演进史
  17. 20230106 作业
  18. 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
  19. 机器学习数据预处理之离群值/异常值:标准差法
  20. Markdown教程保存

热门文章

  1. pep3评估报告解读_首次公布!PISA全球胜任能力评估报告出炉,有何新启示?
  2. sql 如何查询上次的记录_学会SQL并不难,小白学习记录之五(多表查询)
  3. 算法笔记_132:最大流量问题(Java)
  4. 今天才知道还有这个地址 MS 的
  5. linux+分离线程+退出,Linux下线程终止操作.pdf
  6. 动态规划——打家劫舍||(Leetcode 213)
  7. 贪心算法——部分背包(洛谷 P2240)
  8. C/C++排序算法(1)直接插入排序
  9. 升级到Oracle 19c:你不可不知的十大SQL问题(上)
  10. 巨杉数据库 CTO 王涛:新一代分布式数据库