• C#基础总复习03


    继续更新。。。接下来就是面向对象的知识了

    1、面向对象:概念:使用面向对象的思想进行编程可以让的程序变得扩展性更高,便于维护;

    我们在现实生活中去描述一个人的时候,通过描述这个人的特征和行为。
    我们在编程当中,去描述一个对象的时候,通过描述这个对象的属性和方法。

    对象时具体的,不是抽象的,一定是看得见摸得着的。

    我们把一些具有相同属性和方法的对象进行进一步的抽象,提取出了"类"这个概念。
    类就是模子,确定了对象将要拥有的属性和方法。

    2、类:

      语法:

     

    [访问修饰符] class 类名
    {
    成员;
    ......
    }
    访问修饰符:public,公开的,公共的,在哪都可以访问
    class:是我们声明类的关键字
    类名:要符合Pascal命名规范
    成员:
    字段、属性、方法。

    总结:
    1)、我们在写一个类的时候,需要在项目中新建一个类文件。
    2)、在类中,默认的访问修饰符是private,表示私有的,只能在当前类的内部访问。
    3)、在类中,我们现在可以写3种成员,字段,属性和方法
    4)、我们写好了一个类之后,需要创建这个类的对象,叫做类的实例化
    5)、类是不占内存的,但是对象时占内存的。
    6)、自定义类,属于引用类型,我们的对象存储在内存的堆中。

    3、属性:

    1)、我们要求将类中所有的字段都标记为private,但是标记为private之后,类中的字段在外界没有办法被访问。
    2)、并没有办法对字段的非法值进行处理
    属性的出现解决了上面两个问题:
    语法:
    [访问修饰符] 属性类型 属性名
    {
    get{}
    set{}
    }
    属性的出现了保护了字段,对字段的取值和设置进行了限定。
    1)、在赋值的时候进行判断,也就是在set方法中
    2)、在取值的时候进行判断,也就是在get方法中

    属性中既有get也有set,我们叫做可读可写属性。
    只有get叫做只读属性,意味着我们只能给属性取值,而不能对属性赋值。
    只有set叫做只写属性,意味着我们只能给属性赋值,但是不能对属性取值。

    4:关于this关键字的含义:

    1)、代表当前这个类的对象。
    2)、显示的调用本类的构造函数。

    4.1:成员变量和局部变量

    局部变量:方法中的成员都是局部变量。
    成员变量:类中的变量
    局部变量的作用域就是当前方法,而成员变量的作用域当前类。(上面的this很能说明这个)

    小总结:

    字段:存储数据
    属性:保护字段,通过两个方法 get、set
    方法:描述这个对象的行为
    字段跟属性的关系:字段就是女人 属性就是男人(男人一般在外打交道,女人嘛。。。你懂得)

    5、构造函数:构造函数其实就是一个特殊的方法,用来初始化对象。

    eg:[public] class Person

    {

    }

    [public] Person()

    {

    }

    特殊有二:
    1)、构造函数的名称跟类名一样。
    2)、构造函数没有返回值。连void都没有。

    注:

    在类中,如果你不指定其他的构造函数,则会默认有一个无参数的构造函数。
    当你写了一个新的构造函数后。不管这个新写的构造函数有参数还是没有参数,都会把原来那个
    默认的无参数的构造函数干掉。

    5.1关于new关键字的含义:

    1)、在堆中开辟空间
    2)、在开辟的堆空间中创建对象
    3)、调用对象的构造函数进行初始化

    4)、隐藏父类的成员

    6、静态和非静态的区别

    1)、被static标记的成员叫做静态成员,没有被static标记的成员叫做实例成员或者非静态成员。
    2)、在一个非静态类中,既能出现静态成员,也能出现非静态成员。
    3)、非静态成员需要使用对象去调用,而静态成员需要使用类名去调用。
    4)、为什么对象不能去调用静态成员?
    静态成员是随着程序的加载,就已经在内存中开辟空间的。
    5)、静态方法中只允许使用静态成员,但是非静态方法中既可以使用静态成员也可以使用非静态成员。
    6)、静态类中所有的成员都必须是静态成员。
    7)、静态类不允许被创建对象,因为没有实际意义

    6.1:为什么要使用静态类?

    1)、当这个类被用作工具类的时候,可以考虑写成静态类。
    Console con=new Console();
    con.WriteLine();
    Console.WriteLine();
    2)、静态成员在整个项目中是资源共享的。

    7、访问修饰符

    public:公开的公共的,在哪都可以访问。
    private:私有的,只能在当前类的内部访问,出了这个类就访问不到了
    internal:表示只能在当前项目的内部进行访问,出了这个项目就访问不到了。

    (总和5个访问修饰符 基本上用这3个就够了)

    8、特殊的字符串

    字符串对于我们而言是一个非常特殊的类型,特殊原因有二:
    1)、字符串不可变性,我们每次对字符串重新赋值、拼接等操作,都会在内存中产生一个新的实例。
    string s1="张三";
    s1="李四";
    2)、字符串可以看做是char类型的只读数组


    8.1:字符串常用的方法:
    ToCharArray():将字符串转换为char数组
    new string(char[]):将char数组转换为字符串
    Length:获得字符串的字符个数
    ToUpper():将字符串转换为大写形式
    ToLower():将字符串转换为小写形式
    Equals():比较字符串,可以忽略字符串的大小写
    Split():可以把我们在字符串中不想要的字符都切割出去

    9、面向对象的3大特征:

    9.1、封装:把程序当中重复出现的代码封装成了方法。(这个不用多说想必大家都已明白)

    9.2、继承:继承可以解决类与类之间的冗余代码。

    我们把类当中,所共有的成员,单独的封装一个类。 让其他类来继承这个类。

    例如写了 Person 和 Student 2个类 ,Student类继承了Person类,那么我们管Student类称之为子类或者派生类。管Person类叫做父类或者基类。

    子类继承了父类的属性和方法,并没有继承父类的私有字段。

    注:子类并没有继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数。

    为什么子类要去调用父类无参数的构造函数?
    1)、我们可能会在父类无参数的构造函数当中对父类成员进行初始化
    2)、因为子类需要使用父类的成员,需要创建父类的对象。

    (如果我们在父类中新写了一个构造函数,这个时候会干掉父类那个默认的无参数的构造函数)解决办法:

    1)、在父类中重新写一个无参数的构造函数
    2)、显示的调用父类有参数的构造函数。使用关键字base

    base跟this不一样:base代表父类的引用;this代表的是该类的对象。

    注:子类可以使用父类的成员,但是父类永远只能使用自己的成员。

    9.3、继承的两大特性:

    1)、单根性:一个子类只能继承自一个父类。
    2)、传递性:父类中的成员,可以一代一代的向下传递。

    10、里氏转换:

    两句话:

    1、子类可以赋值给父类(如果有一个地方需要一个父类作为参数 我们可以传递一个子类)

    eg:

    class Person
    {
    public void PersonSayHello()
    {
    Console.WriteLine("我是父类");
    }
    }

    class Student : Person
    {
    public void StudentSayHello()
    {
    Console.WriteLine("我是学生");
    }
    }

    class Teacher : Person
    {
    public void TeacherSayHello()
    {
    Console.WriteLine("我是老师");
    }
    }

    Student s = new Student();

    Person p = new Student();

    2、如果父类中装的是子类对象,那么可以将这个父类强值转换为对应的子类对象

    eg:

    Student s = (Student)p;

    s.StudentSayHello();

    10.1、is和as:is 和 as都表示类型转换。

    is:如果转换成功,返回true,否则返回false

    eg:

    Person p = new Student();

    if (p is Student)

    {

      (Student)p).StudentSayHello();

    }

    else
    {
       Console.WriteLine("转换失败");
    }


    as:如果转换成功,则返回对应的对象,否则返回null

    eg:

    Person p = new Student();

    Student s = p as Student;
    s.StudentSayHello();
    Console.ReadKey();

  • 相关阅读:
    count(*) 和 count(1)和count(列名)区别
    网页横向滚动条
    发送公众号模板消息
    tp中S与session()
    php 判断sql执行时间
    thinkphp联查
    php 获取当前时间
    微信分享
    测试用手机奇怪问题
    翻译|多少植物才能净化室内空气?
  • 原文地址:https://www.cnblogs.com/OldRion/p/4402443.html
Copyright © 2020-2023  润新知