设为首页 加入收藏

TOP

C#基础笔记(第十三天)(二)
2017-10-16 18:19:47 】 浏览:5284
Tags:基础 笔记 十三
l,表示部分类
public partial class Person
{
}
public partial class Person
{
}
表示这两个类共同组成person类,可以同时写。
还有个好处,不论公有还是私有,都可以相互读取
部分类里面不能有同样的方法,但可以用重载,相当一个类写在不同的地方

8.sealed密封类
sealed用来标记一个类是密封类
public sealed class Person
特征:密封类是不能够被其他类继承的,但是可以继承于其它类

9.重写ToString方法
Person p=new Person();
console.writeline(p.tostring());
console.readkey();
打印机出来的会是这个对象的命名空间。

****为什么所有类型都可以ToString?
因为所有的类型的父类都是Object
object里面提供的一些方法,子类都可以调用
tostring 都可以调用
ToString是object的虚方法
所以所有的对象所有的变量都可以调用ToString

10.接口
继承的特性是单根性,一个子类只允许有一个父类
一个子类想要继承2个父类,可以写成接口
声明接口的关键字是interface
英语中I开头 able结尾都是表示有能力

接口就是一个规范、能力
只有符合这个规范才能生存
能力:能够实在某一个功能。

接口的语法和特征
格式:
[public] interface I..able
{
成员;
}

Public interface IFlayable
{
void Fly();
String Test();
}
1.可以有返回值,使用string等。
2.接口中的成员不允许添加访问修饰符,默认就是Public
3.接口成员不能有定义,不允许写具有方法体的函数
4.接口不能存数据(字段),存数据用类去存
5.可以写没有方法体的方法(自动属性)
6.方法、自动属性

为什么叫自动属性
虽然我们不写字段,但是在进行编译的时候会自动给我们生成一个私有的字段
要限定它只能有构造函数
public int Age
{
get;
set;
}

自动属性本质上还是两个函数,一个叫get一个叫set

接口中一般就放方法和属性(本质上只有方法)

接口中不添加访问修饰符,默认就是public
类中不添加访问修饰符,默认就是private
例:
生产笔记本的厂商,不管你是什么厂家。最后都要做出USB接口。可以插鼠标键盘。都要符合USB的规范。各个厂家都要按照规范来。也有特殊的,比如苹果,没有网线口。手机也在趋向一个规范。
***什么时候会用到接口?
1、类需要多继承的时候

****接口是一种规范。
只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员

为了多态。
接口不能被实例化。
也就是说,接口不能new(不能创建对象)

 

 

接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。


(默认为public)
接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员,和抽象类一样,只是继承他们的子类去做)。

 

接口中只能有方法、属性、索引器、事件,不能有“字段”和构造函数。

接口与接口之间可以继承,并且可以多继承。

接口并不能去继承一个类,而类可以继承接口 (接口只能继承于接口,而类既可以继承接口,也可以继承类)


实现接口的子类必须实现该接口的全部成员。


一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须写在IA的前面。


class MyClass:A,IA{},因为类是单继承的。


显示实现接口的目的:解决方法的重名问题
什么时候显示的去实现接口:
当继承的接口中的方法和参数一摸一样的时候,要是用显示的实现接口

 

当一个抽象类实现接口的时候,需要子类去实现接口。


面向对象(接口)编程

11.显示实现接口
显示实现接口就是为了解决方法的重名问题

例:
public class Bird:IFlyable
{
public void Fly()
{
Console.WriteLine("鸟会飞");
}
void IFlyable.Fly()
{
Console.WriteLine("我是接口的飞");
}
}

IFlyable fly=new Bird();
fly.Fly();//调用的是接口的Fly

Bird bird=new Bird();
bird.Fly();//这样才是调用自己的Fly

12.总结
//什么时候用虚方法来实现多态?
//什么时候用抽象类来实现多态?
//什么时候用接口来实现多态?

在我提供给你的几个类当中,如果说你能抽象出来一个父类,并且这个父类必须写上这几个子类共有的方法,然后你还不知道怎么去写这个方法,就用抽象类来写这个多态。
反之,抽象出来的父类,方法可以写,并且我还要创建这个父类的对象,就用虚方法。
这几个类里面根本就找不出来父类,但它们都有一个共同的行为,共同的能力。这个时候就用接口来实现多态(比喻:鸟类和飞机没有什么父类,但是都会飞,没办法写个父类让它去继承)

真的鸭子会游泳,木头鸭子不会游泳,橡皮鸭子会游泳
没办法提取一个父类 会游泳,因为木头鸭子不会游泳,没办法用虚方法
没办法写抽象方法,因为真的鸭子需要被创建对象,真鸭子是有意义的。
所以接口是最合适的


13.超市收银系统
Guid能帮我们产生一个全世界独一无二的编号。//不会重复
Guid.NewGuid() 可以ToString()


//用父类来做集合,屏蔽差异,但是不好找,所有的货物都混合到一起了。
//List<ProductFather> list = new List<ProductFather>();
//存储货物、集合去存(因为会增加货物)
//List<SumSung> listSum = new List<SumSung>();
//List<Acer> listAcer = new List<Acer>();
//List<JiangYou> listJiangYou = new List<JiangYou>();
//List<Banana> listBanana = new List<Banana>();
List<List<ProductFather>> list = new List<List<ProductFather>>();
我在一个集合里面又放一个集合
list<>里面的内容应该是这个集合的类型
List<ProductFather> list2 = new List<ProductFather>();
两者区别:
给list2添加数据的时候,可以直接把货物对象添加进来,比如三星,手机,笔记本,酱油,可以直接扔在这个集合里面。
缺点就是取的时候很麻烦。存进去了,不知道哪个下标是谁,得通过调试去看。看这个下标对应的数据是哪个对象,很麻烦

于是我们用2个集合,2个集合什么意思
给list添加数据的时候
list.Add() 添加一个集合进去。其实这个集合就是货架
给他添加数据,添加的并不是商品,而是货架
不管list还是List2都代表整

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MVC几种找不到资源的解决方式 下一篇C#方法过滤器

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目