类的应用

1. 对象的引用

举例:结构版的Person赋值 与 类版的Person赋值

int、decimal、bool、double、byte、枚举、结构等类型(值类型)是传递拷贝,对象(引用类型)则是传递引用。

值类型和引用类型都有那些?

结构类型和类类型就是值类型和引用类型。

结构类型的变量赋值后,新旧结构变量就毫无关系了,无论在方法中怎么改,其值都不变,两者是独立的。

类类型的变量赋值后,就好像是一个对象一样,不管谁的值改变,两者的值都会发生改变。

通俗的说,结构类型就好比是复制文件,而类类型就好比是复制快捷方式

注意:结构与类赋值时不要混淆,以及结构与类的构造方法的异同。

2. 类的继承

在写类的时候,要是能够写一个包含“姓名、年龄、性别”等字段的人类,在创建如学生类、教师类等其他类的时候将其包含进来,就自动具备了“姓名、年龄、性别”等字段,那么就可以说学生类、教师类继承了人类。人类叫做父类,学生类、教师类叫做子类。

语法:

class 父类

{父类成员;}

class 子类:父类

{子类成员;}

子类和父类在此时好像已经成为一个整体,子类里面能够很方便的访问到父类的成员,也可以对其初始化。

但此时均是public,在任何地方均可以访问。因此按照类的设计原则,应该将字段设计为private ,然后提供属性来进行访问。

总结一句话,在构造子类对象时,首先要构造父类,创建对象时,从父类开始创建,知道你现在所处的位子。例子:

View Code
    class MyBase
{
}
class MySub1 : MyBase
{
}
class MySub2 : MyBase
{
}
class MySub3 : MyBase
{
}

3. 类的构造方法

语法:

public 子类名(参数):base(父类参数)

{

子类成员的初始化;

}

为每一个字段进行初始化即可调用父类构造方法,在子类构造方法中,用:base(参数)的形式显示调用父类指定重载的构造方法。如:

View Code
class Base
{
public Base()
{
}
}
class SubBase:Base
{
Public SubBase():base()
{
}
}

创建对象的时候,调用构造方法(new)会先默认调用父类的构造方法,当父类完成创建后再调用子类的构造方法。

如果丢失默认构造方法,则必须写一个无参的构造方法,并且使用:base()调用父类构造方法进行传参。

任何类型的执行都会向上首先调用父类的构造方法,所有的类型都会直接或间接的继承object,所以说继承具有传递性和单根性(任何一个类只有一个父类)

protected修饰受保护的成员,只允许在子类和自己当中访问。

注:object和MemberwiseClone方法在main方法中不能被访问,因为main是静态的,类型中不允许有执行的代码过程,代码的执行应该放在方法中。

4. 类型的转换

子类对象可以直接赋值给父类对象,父类对象里面如果是子类对象,则可以强转位子类对象。例如:

View Code
  class MyBase
{
}
class MySub1:MyBase
{
}
class MySub2 : MyBase
{
}
class MySub3 : MyBase
{
}
class Program
{
static void Main(string[] args)
{
//子类转父类:
// 任何子类对象都能够直接赋值给父类对象
MySub1 ms1 = new MySub1();
MySub2 ms2 = new MySub2();
MySub3 ms3 = new MySub3();
MyBase mb = ms1;
MyBase mb1 = ms2;
MyBase mb2 = ms3;
// 写一个数组,里面的三个成员分别是三个子类对象
MyBase[] mbs = { ms1, ms2, ms3 };
//父类转子类:
MyBase mbb = new MyBase();
MySub1 mss = (MySub1)mbb;
MySub2 msd= (MySub2)mbb;
MySub3 msa = (MySub3)mbb;
}
}

5. is与as

is的语法:

对象或实例  is 类型名

这个表达式返回一个bool类型,表示是否可以转换,常常用来判断父类能否转为子类。

as的语法:

类型名  变量名 = 某个对象或实例 as 类型名

注:前后的类型名要相同

if(某个对象或实例 is 类型名)

{

变量名 = (类型名)某个对象或实例;

}

else

{

变量名 = null;

}

typeA is type B 仅判断

typeA as TypeB 先判断,再转换

6. 静态方法和实例方法(定义和调用)

静态成员在使用类的第一次就初始化了

其他的成员在使用的时候才会初始化

posted @ 2012-03-05 22:52  何冬冬  阅读(442)  评论(0)    收藏  举报