面向对象三大特性:封装、继承、多态
一、封装:
字段(成员变量) 属性 方法(成员函数) 构造函数
实例
静态
二、继承:单继承。
(一)什么是继承?
1.父类成员会派生给子类。
2.子类可以扩展父类。
3.子类可以替代父类。 子类对象 is a 父类
(二)继承的语法:
class 子类名: 父类名
{
}
(三)继承的规则:
1.字段的继承
2.属性的继承
3.方法的继承
4.构造的继承
三、多态:
(一)编译多态(静态多态):方法的重载来实现。
(二)运行多态(动态多态):继承和重写来实现。
运行多态就是在继承的基础上实现。
父类引用指向子类的实例。
例子:吃饭。喂动物。
四、抽象类:abstract
抽象方法:只有方法的声明,没有方法的实现。abstract
public string SetName();
抽象属性:只有属性的声明,没有属性实现。
public string Name
{
get;
set;
}
抽象方法(属性)与抽象类的关系:
1.有抽象方法(属性)的类肯定是抽象类。
2.抽象类不一定有抽象方法(属性)。
接口:只有方法的声明、属性的声明。没有实现,也没有成员变量。
语法:
定义接口:
interface 接口名
{
返回类型 方法名();
属性类型 属性名
{
get;
set;
}
}
实现接口:
class 类名:接口名,接口名...
{
}
interface 接口名:接口名,接口名...
{
}
接口的实现可以实现多个接口。
每一个类只能有一个父类,但可以同时实现多个接口。
例:
interface Openable
{
void Open();
}
class Window : Openable
{
}
接口:制定规则。相关的类只要实现接口,就是该接口下的一个子类。其它设备或程设在调用的时候,只要基于接口进行调用即可,相应的设备或程序就会被调到。
*************接口****************
namespace ConsoleApplication1
{
interface IUSB
{
void Start();
void Stop();
}
}
************继承子函数**************
namespace ConsoleApplication1
{
class UDisk:IUSB
{
public void Start()
{
Console.WriteLine("U盘启动了,可以读写数据了。");
}
public void Stop()
{
Console.WriteLine("U盘安全退出了。");
}
}
}
namespace ConsoleApplication1
{
class KaoQinJi:IUSB
{
public void Start()
{
Console.WriteLine("考勤机启动。。。。");
}
public void Stop()
{
Console.WriteLine("考勤机安全退出");
}
}
}
******主函数*************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HQ.Test.CYL;
namespace ConsoleApplication1
{
class Program
{
static void Main2222(string[] args)
{
Computer c = new Computer();
Mouse m = new Mouse();
UDisk u = new UDisk();
c.StartUSB(m);
c.StartUSB(u);
KaoQinJi k = new KaoQinJi();
c.StartUSB(k);
c.StopUSB(k);
}
}
}
**********调用函数*************
namespace ConsoleApplication1
{
class Computer
{
public void StartUSB(IUSB usb)
{
usb.Start();
}
public void StopUSB(IUSB usb)
{
usb.Stop();
}
}
}
namespace ConsoleApplication1
{
class Mouse:IUSB
{
public void Start()
{
Console.WriteLine("鼠标启动了,可以用鼠标操作电脑了。");
}
public void Stop()
{
Console.WriteLine("鼠标设备停止了。");
}
}
}
namespace HQ.Test.CYL
{
public class Mouse
{
public void Show()
{
Console.WriteLine("这不是鼠标,是老鼠!");
}
}
}
命名空间、项目、程序集。
(一)命名空间:namespace。
作用:对类进行逻辑上的分类管理。在同一个命名空间下,类名不许重复的。
使用:
1.在代码开头,使用using xxxxx;把命名空间导进来。以后再用该命名空间下的时候,可以省去命名空间。
2.每次使用类的时候,在此类之前写上命名空间,即使用类的完全限定名。如果所有的不同命名空间中出现了重名的类,在使用类的时候,就需要使用完全限定名。
命名空间与Java的包是不同的。Java的包,既有逻辑位置也有物理位置。.net的命名空间仅仅是逻辑上的概念。
如何设置默认命名空间?
在解决方案管理器的项目图标上右击,选择属性,设置默认命名空间。
(二)项目
项目主要是用来管理项目所有的文件的。
(三)程序集
就是程序编译运行时的中间代码。.exe或.dll。它们不像C或C++那样编译出来的都是二进制。它是中间代码(IL)
C#语言是两步编辑:第一步:从源代码编译成IL。第二步:运行的时候是从IL编译成二进制。在运行的内存中我们称之为程序集