面向对象基础加强

本文深入解析面向对象编程的核心概念,包括封装性、继承性和多态性,通过实例展示了类的创建过程,并详细解释了里氏替换原则及其应用。同时,介绍了内存分配和对象指针的概念,以及如何通过is与as运算符进行类型检查与转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象:1.找对象 2.调用输入的方法  3.得到结果

面向对象只是人们为了便于开发和维护而提出的一种观点(代码组织形式)

三大特性:
1.封装性:打包  便于管理。诞生:为了解决大型项目的维护与管理。

2.继承性:拿来主义
        什么是继承性:将一个类库作为原始模板,在其上扩展另外的类库


        解决代码的的冗余  单根性(C#和Java类语言的特征),传递性


        注意的问题:构造方法的执行顺序。


类就是模板

>字段


class MyBase

{

      int  num1;//4字节  存10

}

class MyClass:MyBase

{

      int  num1;//4字节   存11

}


MyClass m = new MyClass();

创建步骤:

1.统计从当前类到根类object中所有类的成员字节数,共16字节(填充需8字节)。

2.执行new向操作系统(CLR)申请内存,如果内存不够用抛异常,反之,这段内存标记

为被它使用,并把内存首地址返回,保存,对象创建完毕后,把首地址赋值给变量m。

3.开始从当前构造方法向基类构造方法引用,依次向下调用(object(),MyBase(),MyClass()),

初始化内存中的字段

4.对象创建完毕,返回地址为变量m



里氏转换原则:1.子类可以赋值给父类对象 

                          2.父类对象可以强制转化为对应的子类对象

 class MyBase { }
    class MyClass1 : MyBase { }
    class MyClass2 : MyBase { }

 //里氏第一条
            MyBase m1 = new MyClass1();

  //里氏第二条
            MyClass1 m2 = (MyClass1)m1;

 //MyClass1 m2 = (MyClass1)m1;

is与as运算符:
            //判断是否可以转换
            //bool 变量 is 类型
            Console.WriteLine(m1 is MyClass1);//t
            Console.WriteLine(m1 is MyClass2);//f
            Console.WriteLine(m1 is MyBase);//t
            Console.WriteLine(m1 is object);//t


            MyClass1 m3;
            if (m1 is MyClass1)
            {
                m3 = (MyClass1)m1;
            }
            else
            {
                m3 = null;
            }

           //以上代码等价于

            MyClass1 m4 = m1 as MyClass1;//如果m1可以转换为MyClass1则赋值给m4,如果转换不了则赋值null。


3.多态性

   对象在调用同一个方法的时候表现出来的多种状态。

>>重写基类方法实现多态:父类统一调用  ,子类具体实现。

>>隐藏基类方法实现多态

>>口诀:new则隐藏,override重写;隐藏看类型(调用的时候对象是什么类型的,方法执行的就

是哪个类型的方法),重写只管新(前面所有的方法不要了)


调用规则:对象.方法(); 对象是什么类型,这个方法就是谁的方法。

  在父类方法前加virtual或abstract)
  在子类方法前加override


内存

对象类型指针>>方法表:类型信息与指针偏移量与方法的地址等

具体的字段

同步块索引  参考地址http://www.csharpwin.com/csharpspace/12496r2065.shtml







 









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值