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

本文详细阐述了C#中的类定义、声明、访问控制、继承机制,以及构造器和访问级别的特性。

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

【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同时修饰则表示它既可以被继承链访问,又可以被本程序集访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值