【C#语言入门】19. 什么是类

【C#语言入门】19. 什么是类

一、什么是“类”

  • 类是一种数据结构,它可以包含数据成员(常量和字段)、函数成员(方法、属性、事件、索引器、运算符、实例构造函数、静态构造函数和析构函数)以及嵌套类型。类类型支持继承,继承是一种机制,它使派生类可以对基类进行扩展和专用化
  • 类也是一种数据类型
  • 代表现实世界中的“种类”
 class Program
 {
     static void Main(string[] args)
     {
         Student stu1 = new Student(1,"Tom");
         Student stu2 = new Student(2,"Tim");
         stu1.Report();
     }
 }

 class Student
 {
     public static int Amount { get; set; }
     static Student()
     {
         Amount = 10;
     }
     public Student(int iD, string name)//实例构造器
     {
         this.ID = iD;
         this.Name = name;
         Amount++;
     }
     ~Student()//析构器
     {
         Amount--;
     }

     public int ID { get; set; }
     public string Name { get; set; }
     public void Report()
     {
         Console.WriteLine($"I'm {ID} student, my name is {Name}.");
     }
 }

二、类的声明与访问控制

  • 类声明的全貌
    • C#类声明的位置(99%是生成在名称空间内的;也可以放在所有的显式的名称空间之外;也可以放在类体内,这样就成为了成员类)
    • 声明即定义(C#与Java)
  • 最简单的类声明(必不可少——》class 类名 类体)
    • 类修饰符:new、public、protected、internal、private、abstract、sealed、static
    • internal(如果没有其他修饰符默认internal,代表在本项目里面可以自由访问)、public(代表可以在多个项目里面自由访问)

三、类的继承,类成员访问

  • 类的继承
    • 继承的本质是,继承类对基类在功能上的扩展(extend),横向扩展是对类成员的扩充,纵向扩展是对类成员的重写
    • 只能有一个基类,但可以实现多个其接口
    • 类访问级别对继承的影响
    • sealed类不能被继承
  • 成员的继承与访问
    • 派生类对继承成员的访问
    • 派生类对基类成员的访问
    • 构造器的不可继承性
  • 面向对象的实现风格
    • Class-based
    • Prototype-based
class Program
{
    static void Main(string[] args)
    {
        //是一个 is a 概念,一个子类的实例,语义上也是父类的实例。
        Car car = new Car();
        Console.WriteLine(car is Object);//但是反过来不行,vehicle不是car
        Object o1 = new Vehicle();
        Object o2 = new Car ();
    }
}

class Vehicle//sealed(封闭)类不能成为基类
{

}

class Toy
{

}
//如果基类是internal,子类不能是public,子类的访问级别必须低于或等于父类的访问级别
class Car : Vehicle //只能继承自一个基类,但基接口可以有多个
{

}
class Program
{
    static void Main(string[] args)
    {
        RaceCar raceCar = new RaceCar();
        raceCar.Owner = "Tom";
        Car car = new Car();
        Console.WriteLine(car.Owner);
    }
}

class Vehicle
{
    public Vehicle()
    {
        this.Owner = "N/A";//在继承过程中,实例构造器是不会被继承的
    }
    public string Owner { get; set; }
}

class Car : Vehicle
{
    public Car()
    {
        this.Owner = "Car Owner";//继承链上的类是先从基类开始构造,然后一级一级向下构造
    }

    public void ShowOwner()
    {
        Console.WriteLine(base.Owner);//base所引用的对象是基类对象,但只能向上访问一层
    }
}

class RaceCar:Car
{

}
访问级别
  1. 类成员的访问级别是以类的访问级别为上限的(类如果是internal,那么类成员最多只能是internal上限)
  2. private可以被继承但是无法被访问
  3. protected会将访问级别限制在继承链上,且他是跨程序集的(基类+继承类)。如果protected和internal同时修饰则表示它既可以被继承链访问,又可以被本程序集访问

相关推荐

  1. C#语言入门19. 什么

    2024-03-18 21:30:03       21 阅读
  2. C语言什么悬空指针?

    2024-03-18 21:30:03       35 阅读
  3. C语言什么指针数组?

    2024-03-18 21:30:03       9 阅读
  4. c语言中的宏什么

    2024-03-18 21:30:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 21:30:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 21:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 21:30:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 21:30:03       20 阅读

热门阅读

  1. 使用TOPDN做L53免费域名DNS解析方法

    2024-03-18 21:30:03       22 阅读
  2. Rust矢量数据库领域的优势

    2024-03-18 21:30:03       21 阅读
  3. 【Python学习笔记】Python logging模块的学习

    2024-03-18 21:30:03       25 阅读
  4. 算法笔记p142快速排序

    2024-03-18 21:30:03       22 阅读
  5. docker服务起不来原因及解决

    2024-03-18 21:30:03       21 阅读
  6. JDBC的概念

    2024-03-18 21:30:03       23 阅读
  7. pyttsx3应用场景案例

    2024-03-18 21:30:03       18 阅读
  8. 【基础】连续数的和 c++

    2024-03-18 21:30:03       20 阅读