红皮书c#高级编程(第6版)_第3章_对象和类型_类
2010-03-31 10:37
260 查看
3.2类成员
1.数据成员
包含类的数据:字段(与类相关的变量),常量,事件
2.函数成员
提供了操作类中数据的功能
包含:方法,属性,构造函数,终结器,运算符,索引器
<1>方法
(1)方法声明
[modifiers] return_type MethodName([parameters])
{
//Method body
}
(2)方法调用:MethodName([parameters])
(3)给方法传递参数
c#中所有参数都是通过值来传递的,被调用方法得到的是变量的一个副本,方法退出后对变量的修改会丢失
ref关键字:迫使值参数通过引用传递给方法
out关键字:传递给方法的变量无需初始化,该变量通过引用传送
(4)方法重载
方法的名相同,参数个数和类型不同
注:两个方法不能仅在返回类型上有区别!
两个方法不能仅根据参数声明为ref还是out来区别!
<2>属性(property)
一个方法或一对方法,在客户机代码看,它们是一个字段
允许在属性的访问器get, set前添加不同的访问修饰符(protected,private...)
<3>构造函数
与类同名的方法,无返回类型,如没提供任何构造函数,编译器会自动创建一个默认构造函数,初始化所有成员字段为标准默认值
例如:引用类型为空引用,数字数据类型为0,bool为false
如果现实提供带参数的构造函数,不可用默认构造函数实例化对象
注:可以把构造函数定义为private或protected,防止不相关类访问(不能用new在外部代码中实例化)
(1)静态构造函数
(2)从其他构造函数中调用构造函数(构造函数初始化器)
1.数据成员
包含类的数据:字段(与类相关的变量),常量,事件
/* 定义类 star */ class PhoneCustomer { //数据成员 public const string d = "Monday"; public int id = 0; } /* 定义类 end */ //实例化类 PhoneCustomer p = new PhoneCustomer(); //访问其数据成员 Response.Writer(p.id);
2.函数成员
提供了操作类中数据的功能
包含:方法,属性,构造函数,终结器,运算符,索引器
<1>方法
(1)方法声明
[modifiers] return_type MethodName([parameters])
{
//Method body
}
(2)方法调用:MethodName([parameters])
(3)给方法传递参数
c#中所有参数都是通过值来传递的,被调用方法得到的是变量的一个副本,方法退出后对变量的修改会丢失
ref关键字:迫使值参数通过引用传递给方法
//方法定义 public void Fun(ref int i) { i = 100; } //调用方法 int a = 0; Fun(ref a);
out关键字:传递给方法的变量无需初始化,该变量通过引用传送
//方法定义 public void Fun(out int i) { i = 100; } //调用方法 int a; //声明变量,无需初始化 Fun(out a);
(4)方法重载
方法的名相同,参数个数和类型不同
注:两个方法不能仅在返回类型上有区别!
两个方法不能仅根据参数声明为ref还是out来区别!
<2>属性(property)
一个方法或一对方法,在客户机代码看,它们是一个字段
允许在属性的访问器get, set前添加不同的访问修饰符(protected,private...)
//私有属性采用camel命名规则 private string foreName; //公共属性采用Pascal命名规则 public string ForeName { //只读属性:不带参,必须返回属性声明的类型 get { return foreName; } //只写属性:不带参,但编译器假定它带一个参数,类型与属性同,表示为value set { if(value.length > 20) {} else { foreName = value; } } /* 在属性定义中省略set或get访问器,可创建只读或只写属性 */ }
<3>构造函数
与类同名的方法,无返回类型,如没提供任何构造函数,编译器会自动创建一个默认构造函数,初始化所有成员字段为标准默认值
例如:引用类型为空引用,数字数据类型为0,bool为false
如果现实提供带参数的构造函数,不可用默认构造函数实例化对象
注:可以把构造函数定义为private或protected,防止不相关类访问(不能用new在外部代码中实例化)
(1)静态构造函数
using System; /// <summary> ///StaticMyClass 的摘要说明 /// </summary> public class StaticMyClass { public static readonly string color; /* 定义静态构造函数 * 注:1.静态构造函数没有访问修饰符 * 2.静态函数不带任何参数,返回值 * 3.一个类只有一个静态构造函数 * 4.静态构造函数只能访问静态成员 * 5.静态构造函数至多运行一次,在代码引用类之前执行 */ static StaticMyClass() { DateTime now = DateTime.Now; if (now.DayOfWeek == DayOfWeek.Saturday) { color = "Green"; } else { color = "Red"; } } public StaticMyClass() { } /***** 创建静态构造函数的原因:类有些静态字段属性,要在第一次使用类前,初始化^-^ *****/ } //调用类中的静态属性 Response.Write(StaticMyClass.color); //输出"Red"
(2)从其他构造函数中调用构造函数(构造函数初始化器)
using System; /// <summary> ///Car 的摘要说明 /// </summary> public class Car { public string description; public int wheels; public string name; public string other; public Car() { this.description = "null"; this.wheels = 0; this.name = "11"; } public Car(string description,int wheels,string name) { this.description = description; this.wheels = wheels; this.name = name; } /* public Car(string descripton) { this.description = description; this.wheels = 4; this.name = "66"; } */ /**** 如以上定义的两构造函数导致初始化了相同字段 ****/ //使用c#构造函数初始化器,等同于上面带一个参数的构造函数 public Car(string description) : this(description, 4, "66") { other = "调用一个参数的构造函数!"; } /**** * 构造函数初始化符可包含对同一类另一构造函数的调用 * 也可包含对直接基类构造函数的调用(this关键字换为base) * 构造函数初始化器只调用参数个数最匹配的一个构造函数 ****/ } //调用 Car c = new Car("使用构造函数初始化器"); Response.Write(c.description+c.wheels+c.name+c.other);
相关文章推荐
- 红皮书c#高级编程(第6版)_第3章_对象和类型_部分类
- 红皮书c#高级编程(第6版)_第3章_对象和类型_静态类
- 红皮书c#高级编程(第6版)_第3章_对象和类型_Object类
- 红皮书c#高级编程(第6版)_第3章_对象和类型_扩展方法
- 红皮书c#高级编程(第6版)_第3章_对象和类型_结构
- 《C#高级编程(第6版)》第3章筆記----第3章对象和类型
- 红皮书c#高级编程(第6版)_第3章_只读字段和匿名类型
- JavaScript权威指南_08_第3章_类型/值/变量_3.5-全局对象
- JavaScript权威指南_09_第3章_类型/值/变量_3.6-包装对象
- 犀牛——第3章 类型、值和变量 3.7不可变的原始值和可变的对象引用
- JavaScript权威指南_10_第3章_类型/值/变量_3.7-不可变的原始值和可变的对象引用
- 3_C# 高级编程(第六版)学习笔记——第3章 对象和类型
- python参考手册--第3章类型和对象
- C#高级编程(第7版)笔记--第3章对象与类型
- 红皮书c#高级编程(第6版)_第4章_继承_继承的类型
- 犀牛——第3章 类型、值和变量 3.5 全局对象
- 【笔记】 《js权威指南》- 第3章 类型、值和变量 - 3.5 全局对象
- 红皮书c#高级编程(第6版)_第2章_c#基础_预定义数据类型
- 犀牛——第3章 类型、值和变量 3.6 包装对象
- [JS进阶] JS 之Blob 对象类型