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