C1第 1 节: 面向对象类的介绍和继承

2020-03-24 11:03:58 浏览数 (1)

第 1 节: 面向对象类的介绍和继承 1、字段和属性可以看成是。这个对象的特征; 2、如果出现了曲线错误提示,鼠标放在那里,点击F6(或者等片刻); 3、子类默认调用父类无参数的构造函数,如果父类中没有默认的无参数的构造函数,需要手动添加无参数的构造函数; 4、子类也可以调用父类的有参数的构造函数,利用:base(); public Student(string name, int age ):base(name,age)//可以先写半个括号,就会有自动提示了。。 {

} public Student(string name, int age ):base(name,0)//0表示默认的值,引用父类的名字属性 { }

C1第 2 节封装继承多态介绍

第 2 节封装继承多态介绍 1、子类不可以调用父类中的构造函数,而且,子类如果调用的话,也只能调用父类中的默认的构造函数。

C1第 3 节: 虚方法和抽象方法

第 3 节: 虚方法和抽象方法 1、如果一个类(假设为A)继承了一个抽象的类(假设B),那么抽象类(B类)中的方法,必须在该类(A类)中进行重写; 2、如果一个类含有抽象方法,那么他就是抽象的类; 3、抽象类中的抽象方法是没有主体的,即不能加 “{ }”花括号的:切记!只加分号即可;

关于虚方法需要注意的几点: 1、父类中如果有方法需要让子类重写,则可以将方法标记为virtual; 2、虚方法在父类中必须有实现,哪怕是空的实现;///实现就是有花括号,并且花括号内有代码。空的实现就是说只加一个花括号就可以了 3、虚方法子类可以重写(override),也可以不重写;

关于抽象方法注意的几点: 1、需要用abstract关键字标记; 2、抽象方法不能(在该抽象类中)【括号里的内容是我加上的】有任何方法实现;//就是说没有主体了。。也可以说不加花括号的,只加分号就行了; 3、抽象成员必须包含在抽象类中; 4、由于抽象成员没有任何实现,所以子类必须将抽象成员重写; 5、抽象类不能实例化; 抽象类的作用:抽象类的作用就是为了让子类继承; 6、抽象类中可以包括抽象成员,可以包括有具体代码的成员; 7、还有抽象方法不能用static修饰;

代码语言:javascript复制
1 上机练习:
 2 [code]
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 
 9 namespace Test__GaoJiPian__XuFangFa
10 {
11 class Program
12 {
13 static void Main(string[] args)
14 {
15 
16 // Animal animal = new Animal(); //抽象类是不能实例化的
17 //Cat cat = new Cat();
18 //cat.Show();
19 //Animal cat1 = new Cat();
20 //cat.Show();
21 Console.ReadKey();
22 }
23 }
24 /*
25 abstract class Animal//抽象类
26 {
27 public abstract void Show();//抽象方法 
28 //子类必须将抽象成员Show()方法重写否则会报错;
29 //错误    1    “Test__GaoJiPian__XuFangFa.Animal.Show()”无法声明主体,因为它标记为 abstract    
30 //(((((类似于接口中定义的方法,就是都没有花括号)))))
31 //{
32 // Console.WriteLine("我是抽象类Animal中的抽象方法;Show()");
33 //}
34 }
35 class Cat : Animal //Shift Alt F10(鼠标点击Animal后按下)//目的是快速的实现抽象类中的Show()方法的重写
36 {
37 public override void Show()
38 {
39 //throw new NotImplementedException();删除即可
40 Console.WriteLine("我是子类Cat重写抽象父类Animal中的show()方法");
41 }
42 }*/
43 
44 
45 abstract class Animal//抽象类
46 {
47 public abstract void Show();//抽象方法 
48 public virtual void SaiHi() //抽象类中包括抽象方法,但是也包括其他的方法;但是抽象方法必须在抽象类中存在;;;;
49 {
50 }
51 }
52 abstract class Cat : Animal 
53 {
54 //子类中不写任何的方法,前边再加上关键字abstrct的话,实现了抽象子类不调用抽象父类中的抽象方法show()
55 }
56 }
57 [/code]

C1第 4 节: 接口

第 4 节: 接口 接口是多态的第三种形式;但一般优先考虑接口的使用; 接口 一般是用I开头的 如:IFly; 接口的默认修饰符就是public; 接口比作一种规范,一种能力; interface IFly { } 1.接口中只能包含方法(属性、事件、索引器也都是方法) 2.接口中的成员都不能有任何实现。 3.接口不能被实例化。 4.接口中的成员不能有任何访问修饰符。(默认为public) 5.实现接口的子类必须将接口中的所有成员全都实现。 6.子类实现接口的方法时,不需要任何关键字,直接实现即可。 7.接口存在的意义就是为了多态。 接口解决了类的多继承的问题 以后体积庞大的问题。 显示实现接口

代码语言:javascript复制
1 上机练习:
 2 [code]
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 
 9 namespace Test_GaoJipian
10 {
11 class Program
12 {
13 static void Main(string[] args)
14 {
15 Persons per = new Persons();//实例化persons
16 per.Say();//调用Persons类中的方法
17 // per.Fly();//调用IFly接口中的方法
18 // IFly abc = new IFly();//错误    1    无法创建抽象类或接口“Test_GaoJipian.IFly”的实例    
19 //接口也是一个抽象的似有的特殊的类;反编译工具看出的
20 IFly abc = new Persons();//写成这样倒是没有问题;;将接口IFly看做是父类
21 abc.Fly();
22 Console.ReadKey();
23 }
24 }
25 class Persons : IFly
26 {
27 private string Name;//Ctrl R E//可以快捷的将字段转化为属性//相当于女人比较轻松
28 
29 public string Name1//相当于男人,比较辛苦 
30 {
31 get { return Name; }
32 set { Name = value; }
33 }
34 
35 public void Say()
36 {
37 Console.WriteLine("我是人类中的Say()的方法");
38 }
39 
40 /*
41 public void Fly()//接口的方法实现在类中继承实现
42 {
43 //throw new NotImplementedException();//删除即可
44 Console.WriteLine("我是“实现接口”Shift Alt F10中的接口中的方法");
45 }*/
46 
47 void IFly.Fly()//显示的实现接口Shift Alt F10 //此语句前边不加任何的关键字
48 {
49 //throw new NotImplementedException();删除即可
50 Console.WriteLine("我是“显示的实现接口”Shift Alt F10中的接口中的方法");
51 }
52 }
53 
54 //定义接口
55 interface IFly
56 {
57 //public void Fly(); //错误    1    修饰符“public”对该项无效,前边默认的修饰符是pubic
58 
59 void Fly(); //正确写法
60 //{ }错误    1    “Test_GaoJipian.IFly.Fly()”: 接口成员不能有定义
61 }
62 
63 interface ISwim
64 {
65 void Swim();
66 }
67 }
68 [/code]

C1.NET高级第一章小总结:

C1第一章小总结:

五个访问修饰符,

1、private类中成员的默认访问修饰符( 一般用来修饰类中的成员,如果被修饰的话,那么只能在本类中可以访问,)。

2、protected 本类及子类中可以访问(在继承中用。)

3、internal 当前程序集内部可以访问

4、protected internal当前程序集或子类中(不同程序集也可以访问)。

5、public 任何地方

6、字段和属性及索引器,(字段封装为一个属性(属性里边有读和写))(目的是为了方便外部类调用该字段)

private string name;//定义一个私有的字段,只能在本类中使用

如果索引器不会写,可以参考List<T>集合(转到定义),它里边含有一个方法是索引器方法

代码语言:javascript复制
1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 索引器
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Person p=new Person();
14 
15             Console.WriteLine("索引器的第一个值是" "“"  p[0] "”");
16             Console.WriteLine("索引器的第二个值是"   "“"   p[1]   "”");
17             Console.WriteLine("索引器的第三个值是"   "“"   p[2]   "”");
18             Console.ReadKey();
19         }
20     }
21     class Person
22     {
23         public string[] name = { "精钢狼", "钢铁侠", "泰坦" };
24         public string this[int index]
25         {
26             get
27             {
28                 string str = "";
29                 switch (index)
30                 {
31                     case 0: str = name[0]; break;
32                     case 1: str = name[1]; break;
33                     case 2: str = name[2]; break;
34                 }
35                 return str;
36             }
37         }
38     }
39 }

7、添加引用和导入命名空间,其实并不一样,添加引用是添加一个外部的类库,导入命名空间直接导入就可以了

静态类: 1、 Console,Convert,Math使用时是否需要实例化(不能实例化,反编译工具看出来,Console是抽象的密封的类,抽象类不能实例化,密封类不能继承)

2、声明一个静态字段都能在哪里使用、 写一个什么样的类把作为静态的类来使用呢?

答:【1】写了一个类,这个类中有很多的方法,但是这些方法不想被创建对象的方式(即使用关键字new)来使用,就可以将这个类加上关键字static 成为静态的类; 【2】如果想调用一个类中的静态的方法,那么,需要用这个静态方法所在的类名点出来这个静态方法;(如果是在静态方法本类中调用该静态的方法,直接调用静态方法即可!)

3、静态类为什么不能实例化不能继承?

(以Console(静态类)举例子,反编译工具,转到IL选项看出来,Console是抽象的密封的类,抽象类不能实例化,密封类不能继承)

原因: 1、静态类不能被实例化:abstract

2、静态类不能被继承:sealed

3、sealed关键字,表示类不能被继承。(密封类)

4,、string就是一个静态的类。不能被继承,也不能实例化;;;;

0 人点赞