前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C1第 1 节: 面向对象类的介绍和继承

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

作者头像
静心物语313
发布2020-03-24 11:03:58
3810
发布2020-03-24 11:03:58
举报

第 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就是一个静态的类。不能被继承,也不能实例化;;;;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档