C#错题笔记

以下是对长江雨课堂中c#错题的分析

类和继承练习在这里插入图片描述

类的属性可以设置get和set方法,可以只有get那么这个属性就是只读的,也可以只设置set,那么这个属性就是可写的。但是不能get和set方法都没有!
这里的get和set方法和java中并不一样,但是效果类似,c#中的写法可以让程序员感觉是对属性的直接读取和修改。
例:

 class A
 {
     //定义一个属性
     String name;
     public String Name
     {
         get {
             return name;
         } 
         set { 
             //这里的value是set方法中传来的参数值
             name = value;
         }
     }
 }

接下来我们创建一个main函数操作对象中的属性

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        a.Name = "test";
        Console.WriteLine(a.Name);
    }
}

注意点

  • 类的属性默认是private,除了本类中其他的类是不允许访问的所以我们的get,set方法在实现的时候,必须声明为public
  • 属性必须全部都是小写,因为get和set方法的取名就是必须把属性的第一个字母大写,比如name的方法名是Name
  • get和set方法没有()直接写{ 方法体;}
  • 再调用的时候必须写的是方法 比如a.Name而不是写a,name

在这里插入图片描述
A:构造函数不能被实例对象调用,构造函数只能被new关键字调用
C:构造函数可以被internal,protected,等等访问修饰符所修饰,其中默认的是public
D:构造函数没有返回值
在这里插入图片描述
在c#中创建子类对象时,会隐式调用基类的构造函数,若基类没有空的构造函数,且没有与子类相对应的构造函数时,可能会报错。 也可以通过base关键字显示调用基类的构造方法。

class Animal
{
    public Animal(string name)
    {
        Console.WriteLine("Animal constructor called");
    }
}

class Dog : Animal
{
//子类和父类对应
    public Dog(string name) : base(name)
    {
        Console.WriteLine("Dog constructor called");
    }
}

// 创建 Dog 对象时会依次调用 Animal 和 Dog 的构造方法
Dog dog = new Dog("Buddy");

在这里插入图片描述
在 C# 中,有以下几种访问权限修饰符:
public:公共访问权限,可以从任何地方访问。
private:私有访问权限,只能在当前类中访问。
protected:受保护访问权限,只能在当前类及其子类中访问。
internal:内部访问权限,只能在当前程序集(文件)中的任何位置访问。
以及两种特殊的:
protected internal 这个结合的protected和internal的功能,让被这两个关键字的类既可以被同个文件夹中的类访问,也可以被派生类访问。
private protected
这个关键字修饰的类,只能被同一个文件夹下的派生类访问。
在这里插入图片描述
构造函数是一种特殊的函数,没有返回值类型也不用void修饰。
在这里插入图片描述
在这里插入图片描述

析构函数会被回收器自动调用,不会被显式调用。
在这里插入图片描述
protected:可以被子类和父类访问
private:只能本类访问。
哪怕通过base关键字也不能访问private修饰的方法。
在这里插入图片描述
get,set方法,main函数等等 甚至可以直接在类中定义另外一个类
在这里插入图片描述
在这里插入图片描述
在c#中父类对象可以引用子类对象,但反过来不行,引用是指父类对象可以被赋值成子类对象。

本章总结

本章是面向对象的开始,介绍了一些面向对象的基本知识,以下是我认为这70题的考察重点

  • 对象和类的定义
    • 对象一定是具体的,而类是抽象的
    • 面向对象的逻辑是“万物是对象”
    • 在c#语言中,所有类的父类是object类
  • c#中类的构造函数
    • 构造方法名一定和类名相同
    • 构造方法是特殊的函数,对象实例无法调用,是通过new关键字来进行调用的
    • 如果类本身没有定义构造方法那么默认会有一个空的构造方法
    • 构造派生类的对象时,会先调用父类的构造方法,除了这种隐式调用以外,也可以用base关键字调用
  • c#类中的get和set方法
    • 具体的语法我写在上面题目中了,其中需要注意的是
    • get和set方法的方法名是属性的第一个字母大写,如果只有get方法那么这个属性是只读的,如果只有set方法那么这个方法是只写的。
    • get和set方法可以只有一个,也可以都存在,但是不能一个都没有。
  • c#的继承特点
    • c#只支持单一继承,也就是所有的类只有一个父类,但是一个父类可以有多个派生类。
    • 虽然只支持单一继承,但是可以有多个接口
    • 语法 : 子类:父类
  • 访问权限
    • private:只有当前类可以访问
    • protected:只有当前类和派生类可以访问
    • internal:只有同一个文件夹下的可以访问
    • public:所有人都可以访问

虚方法练习

在这里插入图片描述
在c#中并不是所有的方法都可以重写,而是虚方法可以重载和重写,要用virtual关键字来修饰。
在这里插入图片描述
在派生类重写和重载虚方法时new和override有以下的区别!!(重点

  • new关键字是覆盖,并不是完全消除,当父类引用子类时,new关键字修饰的方法还是会调用父类的方法
  • 而override是完全把父类的删除掉了,当父类引用子类时,调用的就是子类的方法。
    在这里插入图片描述
    sealed关键字密封类,密封类不能被任何类继承。
    在这里插入图片描述
    注意:不是一起使用,virtual在父类中,而override在子类中。
    在这里插入图片描述

实现多态的关键字是override,new是对基类的方法的隐藏,而并没有重写,并没有实现多态

总结

这里是对虚方法的解释,虚方法和虚属性,特别注意的是,虚方法必须用virtual关键字修饰,new和override是不同的 new是覆盖并不是多态,override才是重写,实现了多态。
特别注意的是,父类的对象可以引用子类对象,引用之后,如果调用他们两个相同名的方法,如果new 那么就调用父类的方法,override就是调用子类的方法。

抽象类接口练习

在这里插入图片描述
接口中不可以有常量的定义
在这里插入图片描述
抽象类不能是密封类

抽象类接口练习

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值