C#——类和继承
2015-12-13 21:18
676 查看
前言
之前画的UMl图中接触到了类,但对类是什么,怎么创建,怎么调用没有清晰的认识。现在学习C#,这门面向对象语言,可算领略到了类的魅力。类很大程度上减少了代码的冗余,增加了代码的灵活性。类的基础知识
(1)类和结构体的区别
1.class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。2.struct属于值类型,是分派在内存的栈上的。结构体是复制传递的。Int32,boolean 等都属于结构体。
(2)类中包括字段,属性和方法
类的默认修饰符是internal,字段的默认属性是private.(3)字段和属性的区别
字段是小写,属性的第一个字母是大写;
字段加上private在对象中访问不到
属性可分为读写(get,set),只读(get),只写(set)
例子
在看视频的时候,感觉这个例子非常有意思。给10个人随机分配角色,然后在执行角色对应的方法。看到这个题的时候,脑袋都大了。10个人,6各角色,基类和子类,随机,执行不同的方法。。根本没法弄啊。但是看完视频,自己敲完例子,感觉类真是太方便了。按照高内聚,低耦合的原则,把能独立的功能都抽出来形成类或方法,这样使代码变得灵活,提高了复用性。[code]namespace 类_调用 { class Program { /// <summary> /// 主函数入口 /// 生成6个类 分别是人,老师,学生,帅哥,美女,野兽 给10个人随机分配这6中角色并调用相应角色的方法 /// 涉及到生成类,编写一个判断子类和父类转换的方法,随机数,数组的遍历,case条件结构 /// </summary> /// <param name="args"></param> static void Main(string[] args) { //随机生成6个类 //然后转换 调用这个类的方法 Person[]Per = new Person [10];//实例化10个人放到一个数组里 Random r = new Random(); for (int i = 0; i < Per.Length;i++ )//遍历数组,为10个人分配角色 { int num = r.Next(1,7);//生成1到6的随机数 switch (num )//case 判断 { case 1: Per[i] = new Person(); break; case 2: Per[i] = new Teacher(); break; case 3: Per[i] = new Student();break; case 4: Per[i] = new ShuaiGuo();break; case 5: Per[i] = new MeiNv();break; case 6: Per[i] = new YeShou(); break; } } //遍历数组,10个人执行对应角色的方法 for (int i = 0; i < Per.Length;i++ ) { ShowType(Per[i]); } Console.ReadKey(); } /// <summary> /// 人调用对应类的方法 /// </summary> /// <param name="p"></param> public static void ShowType(Person p) { if (p is Teacher ) { ((Teacher)p).SayTeacher(); } else if(p is Student ) { ((Student)p).SayStudent(); } else if(p is ShuaiGuo ) { ((ShuaiGuo)p).SayShuaiGuo(); } else if (p is MeiNv ) { ((MeiNv)p).SayMeiNv(); } else if (p is YeShou ) { ((YeShou)p).SayYeShou(); } else { //把人这个基类放到最后是为了先判断一个人是不是子类中的老师啊,学生等,如果都不是那只能是人了。但如果放到前面,那么每个子类都可以转化成基类,都会执行person的方法,就不符合逻辑了 ((Person)p).SayPerson(); } } } public class Person { string _name; public string Name { get { return _name; } } int _age; public int Age { get { return _age; } } char _gender; public char Gender { get { return _gender; } } public void SayPerson() { Console.WriteLine("我是人"); } } public class Teacher:Person { int _salary; public int Salary { get { return _salary; } } public void SayTeacher() { Console.WriteLine("我是老师"); } } public class Student:Person { string _id; public string Id { get { return _id; } } public void SayStudent() { Console.WriteLine("我是学生"); } } public class ShuaiGuo:Person { public void SayShuaiGuo() { Console.WriteLine("我是帅锅 "); } } public class MeiNv : Person { public void SayMeiNv() { Console.WriteLine("我是美女"); } } public class YeShou : Person { public void SayYeShou() { Console.WriteLine("我是野兽"); } } }
这样主函数入口就变的很有逻辑,很简单。只有三个功能:1.找10个人 2.给这些人分配角色 3.这10个人根据不同的角色干不同事情。而人,角色都已经生成为了类,一个人根据不同角色做不同的事也成为了方法。这样就像造汽车一样,主函数入口成了一个汽车加工组合的工厂,类和方法就像各个成形的,已经制造号的零件一样,只要拿过来,按照自己的目的组装就行了。
总结
类和继承是面向对象中很重要的一块。C#和我现实生活有很多相似的地方。比如我们现在生产的分工越来越细了,日本丰田的大多数零部件并非日本国产,而是来自20多个国家的160多家工厂,轮胎来自马来西亚,因为马来西亚盛产橡胶,马来的轮胎应该属于世界顶尖的。所以一个好的东西,不一定要自己亲力亲为,吃个饭还要自己种地,自己磨面,自己做。我们要做就是利用好各地的优势资源进行组装就OK了。编程也是一样,把各个能独立的功能都分出去,分给各个工厂,像类,方法等,然后找最优质的零部件进行重组。这样做不但可以提高软件质量,还可以实现各式各样的功能,和高内聚低耦合的目标。
相关文章推荐