C#面向对象(二)

一:抽象方法

1. 在面向对象编程语言中抽象方法指一些只有方法声明,而没有具体方法体的方法。抽象方法一般存在于抽象类或接口中。

在一些父类中,某些行为不是非常明确,因此无法用代码来具体实现,但是类还必须具备此方法,因此,把这样的方法定义为抽象方法。

2. 声明方法:public abstract Eat(); 方法声明只是以一个分号结束,并且在签名后没有大括号,没有函数体,因为太抽象不清楚,具体的实现由各个子类中重写函数实现。

3. 它的特点:

(1) 抽象方法是隐式的 virtual 方法。

(2) 只允许在抽象类中使用抽象方法声明。

(3) 因为抽象方法只声明不提供实实现,所以没有方法体。抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型(方法的返回类型,使用的名称及参数),而不涉及主体代码。

(4) 加abstract关键词。

(5)抽象方法的目的在于指定派生类必须实现与这一方法关联的行为。

二:抽象类

1. 抽象类:无法被实例化的类。关键词是abstract,凡是带有abstract关键词的类都无法被new出来。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

2. 声明:抽象类声明:public abstract class Ren{};

3. 注意:

(1)凡是带有抽象方法的类肯定是抽象类;抽象类却不一定包含抽象方法。

(2)构造方法,静态成员方法不能声明为抽象方法。

(3)一个非抽象类必须实现从父类继承来的所有抽象方法,如果有一个抽象方法没有实现,则此类必须要加abstract关键字。如果父类被声明为抽象类,并存在未实现的抽象方法,那么子类就必须实现父类中所有的abstract成员,除非该类也是抽象的。

4. 特征:

(1)抽象类不能实例化。

(2)一个抽象类可以同时包含抽象方法和非抽象方法。

(3)不能用sealed修饰符修饰抽象类,因为这两个修饰符的含义是相反的,采用sealed修饰符的类无法继承,而abstract修饰符要求对类进行继承。

(4)从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。

例子:Ren类中有一个抽象方法Eat(),在其派生类Chinese和American中必须重写这个方法

abstract class Ren
    {
        protected string name;
        public abstract void Eat();
    }

    class Chinese:Ren
    {
        public override void Eat()
        {
            Console.WriteLine("用筷子吃饭");
        }
    }
    class American : Ren
    {
        public override void Eat()
        {
            Console.WriteLine("用刀叉吃饭");
        }
    }

三:接口

1. 关键字:interface,用interface 关键词来定义。

2. 概念:极度抽象的类,无成员变量,无实例属性和实例方法,只有抽象方法或抽象属性,生活中的例子:标准,规则。

3. 写法:接口不用class,用interface,名字一般以I作为首字母;不用写abstract,里面所有都是,不用写public,必须是public。

    interface IUSB         //接口
    {
        void start();
        void stop();
    }

4. 特点:

(1)接口中的方法都是抽象的,因此无需加abstract修饰符。

(2)接口中的方法都是公用的,因此无需加public修饰符。

(3)接口就是一个规则标准。

(4)接口可以继承父接口。

(5)一个类可以实现(继承)多个接口。一个类只能有一个父类,但可以实现多个接口。

例子:简单的IUSB接口,里面有两个抽象方法start()和stop(),派生类实现接口必须实现接口中的所有方法。

 interface IUSB         //接口
    {
        void start();
        void stop();
    }
    class UDisk : IUSB  //实现接口必须实现里面的所有方法
    {
        public void start()
        {
            Console.WriteLine("U盘启动了");
        }
        public void stop()
        {
            Console.WriteLine("U盘停止了");
        }
    }
    class Cammer : IUSB
    {

        public void start()
        {
            Console.WriteLine("摄像头启动了");
        }

        public void stop()
        {
            Console.WriteLine("摄像头关闭了");
        }
    }

    class computer
    {
        public void CheckUSB(IUSB usb)
        {
            usb.start();
        }
        public void CloseUSB(IUSB usb)
        {
            usb.stop();
        }
    }

用的时候:

       computer c = new computer();
       UDisk u = new UDisk();
       Cammer m = new Cammer();

       c.CheckUSB(u); //插入U盘
       c.CheckUSB(m); //插入摄像头

       c.CloseUSB(u); //拔出U盘
       c.CloseUSB(m); //插入摄像头

四:命名空间

1. 概念:namespace 相当于一个包,它是对类进行分类管理的工具,给计算机看的,相同命名空间下的类可以分在不同的文件中存储。

2. 一般写法:namespace 公司名.项目名.模块名

3. 在别的命名空间上面要使用其它命名空间内的类,可以在它的上面写 using 要使用的命名空间;

五:项目名

一般默认:ConsoleApplication1,用来给人类标识出这个项目是做什么的,给人看的。

六:程序集

在项目名上打右键:属性,即可修改程序集名称

编译出来的exe或dll文件就是程序集。exe是控制台应用程序,dll是库类。

程序集的名字就是编译出来的exe或dll名字。

如果一个项目分三个人来写,A写一个类库,B写一个类库,C写Main函数,把他们整合在一起的流程是:

1. A写完了编译出一个名字如 cc.dll 的文件;

2. B写的时候要用到A命名空间中的某个类,B先将A的cc.dll文件拷贝到自己的目录下,B需要在项目中的引用上打右键:添加引用,通过浏览找到该引用添加进来,然后using A 的命名空间;

3. B写完了编译出一个名字如 dd.dll 的文件;

4. C要写Main函数,在Main函数中操作AB中的类,他需要将AB的dll文件拷贝过来,然后再项目中的引用上打右键,添加引用,通过浏览找到该引用添加进来,然后using A 的命名空间; using B的命名空间,这样就可以在Main函数中用了。

5. 如果A的命名空间中有个类Ren和B的命名空间中有个类Ren重名了,这C在用的时候要用哪一个命名空间下的Ren类就要用该命名空间点出来再用。

时间: 2024-10-03 23:29:28

C#面向对象(二)的相关文章

php面向对象(二) $this

<!doctype html> <html> <head> <meta charset="UTF-8"> <title>this</title> </head> <body> <?php //对象一旦被创建 对象中的每个成员方法里面都会存在一个特殊的对象引用"$this" 成员方法属于哪个对象 $this引用就代表哪个对象 专门用来完成对象内部成员之间的访问 cla

PHP面向对象(二)

一.概念 封装性是面向对象编程中的三大特性之一,封装就是把对象中的成员属性和成员方法加上访问修饰符,使其尽可能隐藏对象的内部细节,以达到对成员的访问控制(切记不是拒绝访问). 含义: a.把对象的全部成员属性和全部成员方法结合在一起,形成一个不可分割的独立单位(即对象) b.信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系. 原则:要求对象以外的部分不能随意存取对象的内部数据(成员属性和成员方法),从而有效的避免了外部错  误对

python面向对象二

1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Student: def __init__(self,name,age,score): self.name = name self.age = age self.score = score @property def get_score(self): return self.score def learn(

python面向对象(二)

类的成员 类的成员可以分为三大类:字段.方法和属性 一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class foo: # 字段(静态字段,保存在类里) cc = '111' def __init__(self): # 字段(普通的字段,保存在对象里) self.name = 'mxz' def f1(self): print(self.name) class Province: # 静态字段 cou

Python自动化开发 - 面向对象(二)

本节内容 1.isinstance(obj,cls)和issubclass(sub,super) 2.反射 3.__setattr__,__delattr__,__getattr__ 一. isinstance(obj,cls)和issubclass(sub,super) 1.isinstance(obj,cls) 检查obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) # True 2.

学java教程之面向对象(二)

学编程吧java学习之面向对象(二)发布了,请通过xuebiancheng8.com来访问 前面已经分析了面向对象中的类和对象,属性,方法这些概念了.下面来学习如何定义一个类.比方说现在有一个学生类,有年龄,姓名等属性,有学习,吃饭的方法. 代码如下: public class Person{ String name; int age; public void study(){ System.out.println("正在学习"); } public void eat(){ Syste

JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链

前  言 上一篇博客(https://www.cnblogs.com/qdjianghao/p/10177360.html )中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方法.静态属性/方法.原型属性/方法,并且一起来探讨一下JS中的原型与原型链. 一 成员属性与成员方法 在构造函数中,通过this.属性声明.或者实例化出对象后,通过"对象.属性"追加的.都属于成员属性

javascript面向对象(二)

我们已经描述了对象的创建,那么接下来主要讲解对象的结构和对象的属性. 首先我们先看下对象和类的结构图 Person类 person的一个实例 那么在上面,我们称变量 p 是 Person类的一个实例(大家在学习或者其他的视频教学时经常听到 创建一个实例对象就是这么来的). 在p和Person之间,通过在创建new Person的时候为对象p添加了两个主要的属性. constructor:构造器 用来指向当前对象创建时,所调用的函数. __proto__:原型指针属性.通常用来指向当前构造函数的p

面向对象二 — — 继承、抽象类、接口

一.继承 extends 继承的特点:Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类 1.参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载. 2.返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载. 3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private) 4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常. 用supe

面向对象二 — — static、final、常量的初始化、this和super

一.static关键字 static :静态的--属于类的 动态的是属于对象的 注意: 属于对象的,那么每个对象都独有一份:属于类的,是所有的对象共有一份 static修饰方法: 凡是加了static的,都是属于类的,凡是属于类的,都是被所有的对象共享 访问方式: 对象.方法名(参数列表) 类名.方法名(参数列表)--推荐使用 总结: 1.静态的方法里面不能访问非静态的方法和属性 2.非静态的方法里面可以访问非静态的方法和属性以及静态的方法和属性 3.静态的方法只能访问静态的方法和属性 4.静态