类成员声明语句由下列部分组成:核心声明、一组可选的修饰符和一组可选的特性(attribute)。

[特性] [修饰符] 核心声明

修饰符:

如果有修饰符,必须放在核心声明之前。

如果有多个修饰符,要有序放置

特性

如果有特性,必须放在修饰符和核心声明之前

如果有多个特性,可以任何顺序

修饰符:public,private,static,const

实例类成员

public int Mem1;

静态字段

static int Mem2;被所有的实例可见,并且如果一个实例改变该值,其它实例使用的该值也会变化。

静态成员可以不用实例化,直接使用。

静态函数成员

Static public void PrintValA();

成员常量

Const int IntVal = 100;// 定义int类型常量,值为100

属性

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

private int theRealValue;

public int TheRealValue

{

get { return theRealValue; }

set { theRealValue = value; }

}

但是使用属性的话,不能直接用get和set,而是直接使用赋值的方式。

构造函数

如果需要外部调用,需要声明为public

和类名相同,但是没有返回类型。

析构函数

每个类只能有一个析构函数

析构函数不能带参数

析构函数不能带访问修饰符

析构函数和类有相同的名称,但以一个"~"字符作前缀

析构函数只对类的实例起作用,因为没有静态析构函数。

不能在代码中显式地调用析构函数。

标准的清理模式

class FuncTest:IDisposable

{

bool disposed = false;

public void Dispose()

{

Dispose(true);

GC.SuppressFinalize(this);

}

~FuncTest()

{

Dispose(false);

}

protected virtual void Dispose(bool disposing)

{

if (disposed == false)

{

if (disposing == true)

{

// Dispose the managed resources

}

// Dispose the unmanaged resources

}

disposed = true;

}

}

readonly修饰符

和const不同,即可以直接初始化,也可以在构造函数中设置它的值。

但是,如果是static字段,初始化必需在static构造函数中完成。

this关键字

this关键字在类中使用,是对当前实例的引用。

索引

和属性一样,索引不分配内存为存储

索引和属性都主要被用来访问其它数据成员这些成员和它们关联,它们为这些成员提供设置和获取访问。

和属性一样,索引可以只有一个访问器,也可以两个都有。

索引总是实例成员,因此,索引不能声明为static。

和属性一样,实现get和set访问器的代码不必一定要关联到某个字段或属性。这段代码可以做任何事情或什么也不做,只要get访问器返回某个指定类型的值即可。

class Employee

{

public string LastName;

public string Firstname;

public string CityOfBirth;

public string this[int index]

{

set

{

switch (index)

{

case 0: LastName = value;

break;

case 1: Firstname = value;

break;

case 2: CityOfBirth = value;

break;

default:

throw new ArgumentOutOfRangeException("index");

}

}

get

{

switch (index)

{

case 0: return LastName;

case 1: return Firstname;

case 2: return CityOfBirth;

default:

throw new ArgumentOutOfRangeException("index");

}

}

}

}

当一个类中,有多个string和多个int想同时定义索引时,可以将索引定义为多个参数。

分部类和分部类型

用partial class的形式,声明分部类

partial class MyClass

{

partial void PrintSum(int x, int y);

public void Add(int x, int y)

{

PrintSum(x, y);

}

}

partial class MyClass

{

partial void PrintSum(int x, int y)

{

Console.WriteLine("Sum is {0}", x + y);

}

}

var mc = new MyClass();

mc.Add(5, 6);

C#图解教程读书笔记(第6章 类进阶)的更多相关文章

  1. SQL Server2012 T-SQL基础教程--读书笔记(1-4章)

    SQL Server2012 T-SQL基础教程--读书笔记(1-4章) SqlServer T-SQL 示例数据库:点我 Chapter 01 T-SQL 查询和编程背景 1.3 创建表和定义数据的 ...

  2. SQL Server2012 T-SQL基础教程--读书笔记(5-7章)

    SQL Server2012 T-SQL基础教程--读书笔记(5-7章) SqlServer T-SQL 示例数据库:点我 Chapter 05 表表达式 5.1 派生表 5.1.1 分配列别名 5. ...

  3. 【C#4.0图解教程】笔记(第1章~第8章)

    第1章 C#和.NET框架 1..NET框架的组成 .NET框架由三部分组成(严格来说只有CLR和FCL(框架类库)两部分),如图 执行环境称为:CLR(公共语言运行库),它在运行期管理程序的执行. ...

  4. C++ primer plus读书笔记——第13章 类继承

    第13章 类继承 1. 如果购买厂商的C库,除非厂商提供库函数的源代码,否则您将无法根据自己的需求,对函数进行扩展或修改.但如果是类库,只要其提供了类方法的头文件和编译后的代码,仍可以使用库中的类派生 ...

  5. C++ primer plus读书笔记——第12章 类和动态内存分配

    第12章 类和动态内存分配 1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形或枚举型const,则可以在类声明中初始化 ...

  6. C#图解教程读书笔记(第2章 C#编程概述)

    这章主要是一个对于C#程序的概括解释 和C/C++不同,不是用include声明引用的头文件,而是通过using的方式,声明引用的命名空间. 命名和C/C++类似,并且也是区分大小写的,这件事情在VB ...

  7. C#图解教程读书笔记(第1章 C#和.net框架)

    C#中的主要需要记住的基础概念 CLR公共语言运行库 CIL中间语言,所有的代码都会编译成中间语言. CLI公共语言基础结构 C#的优点 C#有自动垃圾回收机制

  8. C#图解教程读书笔记(第15章 委托)

    委托是C#的一个很重要的知识点. 1.什么是委托 委托在我认为,就是一系列格式相同的方法列表,可能就是定义的名称不一致,参数.返回值等都是一样的. 2.如何声明委托 delegate void MyF ...

  9. C#图解教程读书笔记(第9章 语句)

    文件头的Using是Using指令,不是using语句 using (TextWriter tw = File.CreateText("xixi.txt")) { tw.Write ...

  10. C#图解教程读书笔记(第8章 表达式和运算符)

    表达式 字面量 整数字面量 字符字面量 字符串字面量 求值顺序 优先级 结合性 与C和C++不同,在C#中的数字不具有布尔意义. 各种运算符的作用(过) 用户定义类型转换 class XiXiInt ...

随机推荐

  1. TCP/IP协议簇分层详解---转

    http://blog.csdn.net/hankscpp/article/details/8611229 一. TCP/IP 和 ISO/OSI ISO/OSI模型,即开放式通信系统互联参考模型(O ...

  2. 移动前端 HTML5 head

    移动前端不得不了解的HTML5 head 头标签(2016最新版) 发表于 2016年10月20日 by 愚人码头 被浏览 875 次 小编推荐:掘金是一个高质量的技术社区,从 ECMAScript ...

  3. SQL Server 2008中的MERGE(数据同步)

    OK,就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入.更新或删除操作.最典型的应用就是进行两个表的同步. 下面通过一个简单示例来演 ...

  4. Java - 避免使用finalizer

    Finalizers are unpredictable ,often dangerous ,and generally unnecessary. 在Java中,GC会自动回收不可达对象相关的空间,而 ...

  5. Octotree Chrome安装与使用整理

    Octotree Chrome作用: 主要使你在github查看项目时可以清晰明了的看到项目的结构以及具体代码,使下载代码更具有目的性,减少不必要代码的下载,而且看起来更清楚. 效果图:(安装插件前) ...

  6. docker 安装ElasticSearch的中文分词器IK

    首先确保ElasticSearch镜像已经启动 安装插件 方式一:在线安装 进入容器 docker exec -it elasticsearch /bin/bash 在线下载并安装 ./bin/ela ...

  7. MYSQL数据库索引类型及使用

    MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 ...

  8. 【Android】11.0 UI开发(二)——列表控件ListView的简单实现1

    ************************ 转载请注明出处:https://www.cnblogs.com/xiaofu007/p/10342462.html ***************** ...

  9. aop postsharp的使用:在方法进入/成功/失败/退出时获取方法名和参数值

    1.nuget安装postsharp 2.编写attribute标记 [Serializable] [AttributeUsage(AttributeTargets.Method, AllowMult ...

  10. QQ 聊天机器人小薇发布!

    简介 XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动: 监听多个 QQ 群消息,发现有"感兴趣"的内容时通过图灵机器人进行智能回复 监 ...