• 第八章 C#面向对象编程(Object-Oriented Programming,OOP)简介


    .NET OOP

    一、面向对象编程的含义

    1.函数(过程化)编程常常导致单一的应用程序,即所有的功能都包含在几个代码模块中(常常是一个代码模块)

      而使用OOP技术,常常使用许多代码模块,每个模块提供特定的功能,每个模块都是孤立的,甚至与其他模块完全孤立。这种模块化编程方法提供了非常大的多样性,打打增加了重用代码的机会。

    (把更多的精力放在项目的设计阶段)

    2.对象是从类型中创建的,对象的类型叫类。可以用类的定义实例化对象。类相当于汽车的模板或者用于构建汽车的规划,汽车本身是这些规划的实例,可以看做对象。

    3.(1)可以通过属性和字段访问对象中包含的数据。这个对象数据可以用于区分不同的对象,因为同一个类的不同对象在属性和字段中存储了不同的值。

       (2)属性不提供对数据的直接访问(可以更好地控制各种行为)      如果是字段,字段的取值范围仅由存储改该信息的类型来限制。

       (3)可访问性:通常把字段设置为私有,通过公共属性访问他们,这样类中的代码就可以直接访问存储在字段中的数据,而公共属性禁止外部用户访问这些数据,以防他们在其中放置无效内容。

    4.方法(对象中的函数)

       方法参数带标识符in(不使用out和inout的情形).out(out).inout(ref) 

    5.一切皆对象

    对象的生命周期(正在使用,构造阶段,析构阶段)

    (1)(实例)构造函数:用new关键字调用。cupOfCoffee myCup = new cupOfCoffee();()中可填写参数

    (2)析构函数:清理对象

    6.静态和实力类成员(尚未理解)

    (1)静态构造函数

    (2)静态类

    二、OOP技术

    1.接口:把公共实例(非静态)方法和属性组合起来,以封装特定集合的一个功能。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。接口名称一般以I开头

      把接口看做类的创建者和使用者之间的契约。。。

    2.可删除的对象:

    IDisposable接口。支持IDisposable接口的对象必须实现其Dispose()方法,即他们必须提供这个方法的代码。但不再需要某个对象是,调用方法释放重要资源。

    using关键字可以在代码块中初始化使用重要资源的对象。会在代码块末尾自动调用Dispose()方法

    <ClassName> <VariableName> = new <ClassName>();

    ...

    using(<VariableName>)

    {

    ...

    }

    或者

    using(<ClassName> <VariableName> = new <ClassName>());

    {

    ...

    }

    3.继承

    被继承(派生)的类也成为父类(基类)                 C#中的对象仅能直接派生与一个基类

    继承性可以从一个较一般的基类扩展或创建更多的特定类。

    比如,一个代表农场家畜的类Animal,拥有EatFood()或Breed()等方法,我们可以创建一个派生类Cow,支持所有的这些方法,它也有自己的方法,入Moo()和SupplyMilk()。还可以创建另一个派生类Chicken,该类有Cluck()和LayEgg()方法。

    派生类不能访问基类的私有成员,但可以访问公共成员。

    第三种可访问性protected,只有派生类才能访问protected成员

    外部成员不能访问protected和private成员

    基类的成员可以是虚拟的,成员可以由继承它的类重写。   虚拟成员不能是私有成员

    基类可以定义为抽象类。抽象类不能直接实例化。要使用抽象类,必须继承这个类,抽象类可以有抽象成员,这些成员在基类中没有实现代码,这些实现代码必须在派生类中提供。

    所有对象都有一个共同的基类object。

    4.多态性

    8.2.3 多态性
    继承的一个结构是派生于基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法
    处理从同一个基类实例化的对象。例如,如果基类Animal 有一个EatFood()方法,则从派生于它的
    类Cow 和Chicken 中调用这个方法,其语法是类似的:
    Cow myCow = new Cow();
    Chicken myChicken = new Chicken();
    myCow.EatFood();
    myChicken.EatFood();
    多态性则更推进了一步。可以把某个派生类型的变量赋给基本类型的变量,例如:
    Animal myAnimal = myCow;
    不需要进行强制类型转换,就可以通过这个变量调用基类的方法:
    myAnimal.EatFood();
    结果是调用派生类中的EatFood()的实现代码。注意,不能以相同的方式调用派生类上定义的方
    法,下面的代码不能运行:
    myAnimal.Moo();
    但是,可以把基本类型的变量转换为派生类变量,调用派生类的方法,如下所示:
    Cow myNewCow = (Cow)myAnimal;
    myNewCow.Moo();

    (从一个派生类中实例化的所有对象都可以看作是其父类的实例)

    5.接口的多态性

    尽管不能像对象那样实例化接口,但可以建立接口类型的变量,然后就可以在支持该接口的对
    象上,使用这个变量访问该接口提供的方法和属性。
    例如,假定不使用基类Animal 提供EatFood()方法,而是把该方法放在IConsume 接口上。Cow
    和Chicken 类也支持这个接口,唯一的区别是它们必须提供EatFood()方法的实现代码(因为接口不包
    含实现代码),接着就可以使用下述代码访问该方法了:

    Cow myCow = new Cow();
    Chicken myChicken = new Chicken();
    IConsume consumeInterface;
    consumeInterface = myCow;
    consumeInterface.EatFood();
    consumeInterface = myChicken;
    consumeInterface.EatFood();
    这就提供了以相同方式访问多个对象的简单方式,且不依赖于一个公共的基类。例如,这个接
    口可以由派生于Vegetable 的VenusFlyTrap 类实现,而不是由Animal 实现:
    VenusFlyTrap myVenusFlyTrap = new VenusFlyTrap();
    IConsume consumeInterface;
    consumeInterface = myVenusFlyTrap;
    consumeInterface.EatFood();
    在这段代码中,调用consumeInterface.EatFood()的结果是调用Cow、Chicken 或VenusFlyTrap
    类的EatFood()方法,这取决于哪个实例被赋予了接口类型的变量。
    注意,派生类会继承其基类支持的接口。在上面的第一个示例中,要么是Animal 支持IConsume,
    要么是Cow 和Chicken 支持IConsume。有共同基类的类不一定有共同的接口,反之亦然。

    6.对象之间的关系(包含,集合)

     包含关系:一个类包含另一个类。这类似于世承关系,但包含类可以控制对被包含类的成
    员的访问,甚至在使用被包含类的成员前进行其他处理。
     集合关系:一个类用作另一个类的多个实例的容器。这类似于对象数组,但集合有其他功
    能,包括索引、排序和重新设置大小等。

    7.运算符重载

    为重载运算符编写代码,这段代码用作类定义的一部分,而该运算符作用于这个类

    8.事件

    使用事件可以创建事件驱动的应用程序

    9.引用类型和值类型

    在 C#中,数据根据变量的类型以两种方式中的一种存储在一个变量中。变量的类型分为两种:
    引用类型和值类型,其区别如下:


     值类型在内存的一个地方存储它们自己和它们的内容。
     引用类型存储指向内存中其他某个位置(称为堆)的引用,而在另一个位置存储内容。


    实际上,在使用C#时,不必过多地考虑这个问题。到目前为止,所使用的string 变量(这是引用
    类型)与使用其他简单变量(大多数是值类型,例如int)的方式完全相同。
    值类型和引用类型的一个主要区别是,值类型总是包含一个值,而引用类型可以是null,表示
    它们不包含值。但是,可以使用可空类型(这是泛型的一种形式)创建一个值类型,使值类型在这个
    方面的行为方式类似于引用类型(即可以为null)。这是一个高级论题,详见第12 章。
    只有string 和object 简单类型是引用类型,但数组也是隐式的引用类型。我们创建的每个类都
    是引用类型,这就是在这里说明这一点的原因。
    结构类型和类的重要区别是,结构类型是值类型。

    8.3 Windows应用程序中的OOP
    第2 章介绍了如何在C#中创建简单的Windows 应用程序。Windows 应用程序非常依赖OOP 技
    术,本节将论述OOP 技术,说明本章的一些论点。下面通过一个简单示例加以说明。
    试一试:适用对象
    (1) 在C:BegVCSharpChapter08 目录中创建一个新的Windows 应用程序Ch08Ex01。
    (2) 使用“工具箱”(Toolbox)添加个新的按钮控件,使之位于Form1 的中央,如图8-12 所示。
    (3) 双击按钮,为鼠标单击事件添加代码,修改代码,如下所示:

    private void button1_Click(object sender, EventArgs e)
    {
    ((Button)sender).Text = "Clicked!";
    Button newButton = new Button();
    newButton.Text = "New Button!";
    newButton.Click += new EventHandler(newButton_Click);
    Controls.Add(newButton);
    }
    private void newButton_Click(object sender, System.EventArgs e)
    {
    ((Button)sender).Text = "Clicked!!";
    }
    }


      

  • 相关阅读:
    孙权劝学
    劝学
    为学
    字符串的全排列
    剑指offer面试题3二维数组中的查找
    如何正确安装软件
    写给自己的话
    Linux常用命令
    第三届华为杯
    D^3ctf两道 pwn
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/4151599.html
Copyright © 2020-2023  润新知