类成员

字段和方法是最重要的类成员类型,字段是数据成员,方法是函数成员

字段

字段是隶属于类的变量

  • 它可以是任何类型,无论是预定义类型还是用户定义类型
  • 和所有变量一样,字段用来保存数据
    • 它们可以被写入
    • 它们可以被读取

方法

方法是具有名称的可执行代码块

声明方法最简单语法如下

  • 返回类型,如果一个方法不返回值,那么返回类型被指定为void
  • 名称
  • 参数列表
  • 方法体

创建变量和类的实例

  • 类是引用类型
  • 数据的引用保存在类类型的变量中

常量与静态量

虽然常量成员变现的像一个静态量,但不能将常量声明为static

属性

属性是代表类的实例或类中的一个数据项成员

与字段类似,属性有如下特征

  • 它是命名的类成员
  • 它有类型
  • 它可以被赋值和读取

然而和字段不同,属性是一个函数成员

  • 它不为数据存储分配内存
  • 它执行代码

属性声明和访问器

set访问器总是

  • 拥有一个单独的,隐式的值参,名称为value,与属性类型相同
  • 拥有一个返回类型void

get访问器总是

  • 没有参数
  • 拥有一个与属性类型相同的返回类型

执行其他计算

属性访问器不不局限于仅仅对关联的后备字段传进传出参数,访问器能进行任何计算,或不执行任何计算,唯一必须的行为是get访问器要返回一个属性类型的值

下面的代码,set访问器在设置关联字段之前实现过滤,如果输入大于100,就设为100

 int _x = ;
int X
{
get { return _x;}
set { _x = value > ? : value; }
}

只读和只写属性

  • 只有get访问器的属性称为只读属性
  • 只有set访问器的属性称为只写属性
  • 两个访问器中至少要定义一个,否则编译器会产生一条错误消息

计算只读属性示例

下列代码展示了只读属性

 int _x = ;
int _y = ;
int Z//只读属性
{
get { return (_x+_y);}
}

Z的值只能基于_x和_y的值产生

自动实现的属性

自动实现的属性要点如下

  • 不声明后备字段
  • 不能提供访问器的方法体
  • 除非通过访问器,否则不能访问后备字段

静态属性

属性也可以声明为static。静态属性的访问器和所有静态一员,具有以下特点

  • 不能访问类的实例成员,虽然他们能被实例成员访问
  • 不管类是否存在,他们都是存在的
  • 当从类的外部访问时,必须使用类名访问,而不是实例名

readonly修饰符

字段可以用readonly修饰,其作用类型于字段声明为const,一但值被设定就不能改变

  • const字段只能在字段的声明中进行初始化,而readonly字段可以在下列任意位置初始化

    • 字段声明语句,类型const
    • 类的任何构造函数,如果是static字段,初始化必须在静态构造函数中完成
  • const字段的值必须在编译时决定,而readonly的值可以在运行时决定
  • 和const不同,const的行为总是静态的,而readonly的以下两点是正确的
    • 它可以是实例字段,也可以是静态字段
    • 它在内存中有存储位置

this关键字

this关键字在类中使用,是对当前实例的引用。它只能被用在下列类成员的代码块中

  • 实例构造函数
  • 实例方法
  • 属性和索引器的实例访问器

this用于下列目的

  • 用于区分类的成员和本地变量的参数
  • 作为调用方法的实参

索引器

什么是索引器

索引器是一组get和set的访问器,与属性类似。

下图展示了一个类的索引器的表现形式,该类可以获取和设置string型值

索引器和属性

索引器和属性很多方面是相似的。

  • 和属性一样,索引器不用分配内存来存储
  • 索引器和属性都主要被用来访问其他数据成员,它们与这些成员关联,并未它们提供获取和设置访问
    • 属性通常表示单独的数据成员
    • 索引器通常表示多个数据成员

关于索引器,还有一些注意事项

  • 和属性一样,索引器可以只有一个访问器,也可以两个都有
  • 索引器总是实例成员,因此不能声明为static
  • 和属性一样,实现get和set的访问器的代码不必一定要关联的某个字段或属性。这段代码可以做任何事情或什么都不做,只要get访问器返回某个指定类型的值即可

声明索引器

声明索引器的语法如下

  • 索引器没有名称。在名称的位置是this关键字
  • 参数列表在方括号中间
  • 参数列表中必须至少声明一个参数

声明索引器类似于声明属性

索引器的set访问器

set访问器有如下语法

  • 它的返回类型为void
  • 它使用的参数列表和索引器声明中的相同
  • 它有一个名称为value的隐式参数,值参类型和索引类型相同

索引器的get访问器

get访问器有如下语义

  • 它的参数列表和索引器声明中的相同
  • 它返回与索引器相同类型的值

下列代码为类X声明一个索引器

 class X
{
public string A; //调用字段1
public string B; //调用字段2
public string C; //调用字段3
public string this[int index]
{
set
{
switch(index)
{
case :
A = value;
break;
case :
B = value;
break;
case :
C = value;
break;
default:
throw new ArgumentOutOfRangeException("index"); }
}
get
{
switch (index)
{
case : return A;
case : return B;
case : return C;
default:
throw new ArgumentOutOfRangeException("index");
}
}
}
}

访问器的访问修饰符

默认情况下,成员的两个访问器有和成员自身相同的访问级别。也就是说,如果一个属性有public访问级别,那么它的两个访问器都有同样的访问级别,对索引器也一样。

  不过,你可以为两个访问器分配不同的访问级别。如下代码演示了一个非常常见的列子,那就是为set访问器声明为private,为get访问器声明为public。get之所以是public的,是因为属性的访问级别就是public的。

  在这段代码中,尽管可以从类的外部读取该属性,但却只能在类的内部设置它。

  class Person
{
public string Name { get; private set; }
public Person(string name)
{
this.Name = name;
}
}

访问器的访问修饰符有几个限制。最重要的限制如下

  • 仅当成员(属性或索引器)既有get访问器和set访问器时,其访问器才能有访问修饰符
  • 虽然两个访问器都必须出现,但它们中只能有一个有访问修饰符
  • 访问器的访问修饰符必须比成员的访问级别有更严格的限制性

下图阐明了访问级别的层次。访问器的访问级别在图表中的位置必须比成员的访问级别的位置低

[C#基础] 类的更多相关文章

  1. python基础——类和实例

    python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...

  2. C#核心基础--类(2)

    C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...

  3. OC基础 类的三大特性

    OC基础  类的三大特性 OC的类和JAVA一样,都有三大特性:继承,封装,多态,那么我们就来看一下OC中类的三大特性. 1.继承 继承的特点: (1)子类从父类继承了属性和方法. (2)子类独有的属 ...

  4. Python基础-类

    Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区 ...

  5. python基础——类名称空间与对象(实例)名称空间

    python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...

  6. 设计模式基础:类及类关系的UML表示

    设计模式基础:类及类关系的UML表示 2009-10-26 17:00 by 宗哥, 1891 阅读, 1 评论, 收藏, 编辑 UML中,类关系分为这几种,泛化(generalization), 实 ...

  7. C#核心基础--类的声明

    C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...

  8. 第31节:Java基础-类与对象

    前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...

  9. C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态

    C#基础--类/接口/成员修饰符,多态.重载.重写,静态和非静态 类/接口/成员修饰符 C#修饰符---接口: 接口默认访问符是internal接口的成员默认访问修饰符是public C#修饰符--类 ...

  10. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

随机推荐

  1. visual studio 2010配置驱动开发环境

    visual studio 2010 配置驱动开发环境 ** 工具/材料 VS2010.WDK开发包 **  配置过程 以下将讲述VS2010驱动开发环境的配置过程,至于必要软件的安装过程这里不再赘述 ...

  2. BZOJ 1025: [SCOI2009]游戏( 背包dp )

    显然题目要求长度为n的置换中各个循环长度的lcm有多少种情况. 判断一个数m是否是满足题意的lcm. m = ∏ piai, 当∑piai ≤ n时是满足题意的. 最简单我们令循环长度分别为piai, ...

  3. BZOJ 3196: Tyvj 1730 二逼平衡树( 树套树 )

    这道题做法应该很多吧.... 我用了线段树套treap.... -------------------------------------------------------------------- ...

  4. awk 工具简介NF-NR

    相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个『字段』来处理. 因此,awk 相当的适合处理小型的数据数据处理呢!awk 通常运作的模式是这样的:[root@linu ...

  5. windows phone8手机玩玩

    背景介绍 北京移动在搞活动,预存话费赠手机活动,因此办理了一个,来玩新手机了. 上手一周了,白色的手机,对我来说配置凑合,主要是想学习wp8手机的开发,这样也有个样机玩玩.开发人员就是这么的喜欢玩. ...

  6. 在WINDOWS下 三步快速配置 eclipse c++ 环境

    所需软件 1.Eclipse IDE for C/C++ Developers http://www.eclipse.org/downloads/packages/eclipse-ide-cc-dev ...

  7. 【Unity 3D】使用 2DToolkit 插件 制作2D精灵动画

    话说博客传图也太麻烦了吧,一个一个文件一个一个传....为什么不能直接粘贴了,自动上传呢... 刚直接粘贴了,结果一张图没有,又重新截一次图,在传了一次...真是太**了 好了,吐槽完了,开始博客吧 ...

  8. 图片转换成Base64编码集成到html文件

    首先为什么要这么做?  原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...

  9. notepad++ 配置笔记

    0.notepad++简单介绍 Notepad++是一套很有特色的自由软件的纯文字编辑器,有完整的中文化接口及支援多国语言撰写的功能.它的功能比 Windows 中的 Notepad更强大.Notep ...

  10. 2014 I/O归来:Google连接一切

    6月,WWDC 2014与Google I/O  (大部分演讲视频都公开.Youtube须要FQ,很值得一看)相继召开.今年是我第三年參加Google I/O大会. 三年间.Google积累了非常多技 ...