C#小结

来源:互联网 发布:友情岁月演唱会知乎 编辑:程序博客网 时间:2024/04/28 18:40

C#真正接触的面向对象的语言,和学过的VB一样包含一些语言的基础比如讲的数据类型、运算符、控制语句……大同小异,首先来整体的看一下

 

C#小结

     首先从基础看起,在数据类型分为值类型和引用型。值类型在内存里是值,而引用类里是地址。

     还需要区别的是结构和类

        类是引用型,结构是值类型

        类可(被)继承,结构不可以

        类在申明变量时可以直接初始化,结构不可以

C#是一门面向对象的语言,可以通过它对面向对象有进一步的认识,面向对象有三个特征:封装、继承、多态。


封装:类自己包含自己在操作时需要的所有信息,只留给外部接口实现一些功能。

C#中体现如下:

<span style="font-size:18px;">
Public class Animal{Private int age;Private string name;Public int getage{Return age;}}</span>

Animal作为一个类,将自己的年龄、名字声明为私有的,其他的任何对象都不可以访问,这就是将自己封装起来,而声明的getage是一个公有的方法,可以被访问,它就是people类留给外部的接口。封装起来的类能够自己独立的完成功能,可以随便的进行内部的修改。

 

继承:就和现实中的父和子一样,儿子即子类继承父亲即父类的特征,同时还有自己特有的特征。

这在C#中体现如下:

Public class Animal{Public int age;Public string name;Public int getage(){Return age;}}Public class Cat:Animal {Public void shout(){Console.WriteLine(“我是猫,喵”);}}
这里的Cat继承Animal的共有成员和变量,同时拥有自己特有的shout方法。

 

多态:一样的方法,有不同的实现。

     多态在面向对象中几乎是时刻都在体现着,来看一下几种实现多态的方法。

1、重载

①   方法重载  ②运算符

2、重写

①   Virtual方法重写 ②抽象方法重写

3、接口

 

重载和重写的区别:

重载是在一个类里实现的,重载的方法必须有相同的方法名,不同的参数类型或个数;重写是在父类和子类之间实现的,且重写的方法必须是虚方法或抽象的方法(PS:抽象的方法其实就是隐式的虚方法,只是没有用virtual进行声明)

 

方法重载

<span style="font-size:18px;">
Class PayMoney{     Public void paymoney(int electcharge)     {         //付电费的代码     }Public void paymoney(long watercharge)     {         //付水费的代码     }}</span>

运算符重载

<span style="font-size:18px;">//Math是一个类,有x,y,z成员Public Math operator + (Mathnum1,Math num2){     MathA = new Math(); //实例化一个A对象     A.x=num1.x+num2.x     A.x=num1.y+num2.y    A.x=num1.y+num2.y}</span>

一般的“+”只能计算两个数,而重载之后可以安如上方法进行计算

虚方法重写

<span style="font-size:18px;"></span>
<span style="font-size:18px;">
Public class Animal{Public int age;Public string name;Public int getage(){Return age;}Public virtual void shout() //虚方法要被重写才可以使用{Console.WriteLine(“要重写”);}}Public class Cat:Animal   {Public override void shout()   //对virtual方法进行重写{Console.WriteLine(“我是猫,喵”);}}</span>

抽象方重写和虚方法重写类似,只是在类和方法之前加上abstract关键字即可。

 

接口的多态

接口是拥有接口所定义的方法的类才进行实现。一个接口可以被多个类实现,一个类也可以实现多个接口。

     首先定义一个接口

        

<pre name="code" class="csharp"><span style="font-size:18px;">
Interface shout  //定义一个叫的接口{Void shout(); //这是叫的方法,不进行实现所以不用{} }Public class Cat:shout  //相当于继承接口 l   <span style="white-space:pre"></span>        {Public void shout()   //对接口的方法进行实现<span style="white-space:pre"></span>{Console.WriteLine(“我是猫,喵”);}<span style="white-space:pre"></span>}Public class student:shout{Public void shout()   //对接口的方法进行实现<span style="white-space:pre"></span>{Console.WriteLine(“我是学生,喂”);}}</span>

由上例中可以看出实现接口的类可以没有没有关系,不一定是继承同一个父类。

       这次通过C#的学习对面向对象有有了进一步的认识,这些是理论上初步的认识,还没有实践的体会,欠缺的还很多。

        我们只学过VB这门基于对象的语言,在使用时有很深的面向过程的体会,我们需要知道自己要实现什么功能,然后一步一步的去实现,大量的代码都会重复,而面向对象的继承、多态可以增到代码的复用性,这其中的好处还要慢慢的体会。

0 0
原创粉丝点击