面向对象---4

面向对象三大特性:封装、继承、多态
一、封装:
    字段(成员变量)    属性    方法(成员函数)    构造函数
实例
静态

二、继承:单继承。
(一)什么是继承?
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编译成二进制。在运行的内存中我们称之为程序集

原文地址:https://www.cnblogs.com/xianshui/p/4474607.html