CodeSnippet/CsharpTests/03_OOPTests.cs

(开头部分) 14KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Microsoft.VisualStudio.TestTools.UnitTesting;

using System;

/// <summary>
/// 实现继承/接口继承/抽象类
/// </summary>
///<remarks>
/// 抽象类和抽象函数
///    C#中允许把类或函数声明为abstract,抽象类不能被实例化.抽象函数也不能直接实现,必须在非抽象的派生类中重写
///    如果类包含抽象函数, 则该类也必须被声明为抽象的
///    抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型,不涉及主体代码
///    派生自抽象类的类需要实现其基类的抽象方法,才能实例化对象
///    使用override关键字可在派生类中实现抽象方法,经override声明重写的方法称为重写基类方法,其签名必须与override方法的签名相同
/// 抽象类和接口的区别
///    相同点:
///      1.都可以被继承
///      2.都不能被实例化
///      3.都包含方法声明
///      4.派生类必须实现未实现的方法
///    区别:
///      抽象基类可以定义字段/属性/方法实现.接口只能定义属性/索引器/事件/方法声明
///      抽象类是一个不完整的类, 需要通过集成进一步细化.而接口更像是一个行为规范,表明我能做什么
///      接口是可以被多重实现的, 可以有多个类实现接口, 
///      因为类的单一继承性, 抽象类只能被单一继承
///      抽象类实现继承需要使用override关键字,接口则不用 
///      如果抽象类实现接口, 可以把接口方法映射到抽象类中作为抽象方法不必实现, 而在抽象类的子类中实现接口方法 
///      抽象类表示的是:这个对象是什么
///      接口表示的是:这个对象能做什么;使用抽象类是为了代码的复用,使用接口是为了实现多态性
/// 普通类和抽象类的区别
///    都可以被继承 抽象类不能实例化,
///    普通类允许实例化 抽象方法值包含方法声明而且必须包含在抽象类中 
///    子类继承抽象类必须实现抽象类中的抽象方法除非子类也是抽象类 抽象类中可以包含抽象方法和实例方法
/// 派生类的构造函数执行顺序
///    实例化父类时,可以使用new子类,执行构造函数顺序为:执行父类构造函数=>执行子类构造函数
///    实例化子类时,只可以new子类,执行顺序同上
///    父类实例化后,只能执行父类的方法,获得父类的属性等
///    实例化子类后,可同时执行子类和父类的方法和属性,如同名方法,则执行子类的方法
///    子类构造函数可以使用base关键字指定调用的父类构造函数
///</remarks>
namespace CodeSnippet.CsharpTests.OopTests
{
    [TestCategory("OopTests")]
    [TestClass()]
    public class OopTests
    {
        /// <summary>
        /// 类的定义
        /// </summary>
        [TestMethod]
        public void ClassDefinition()
        {
            Person person = new()
            {
                _name = "wang",
                Age = 100
            };
            Console.WriteLine($"{person._name},{person.Age},{person.Birthday},{person.readonlyValue},{Person._describe}");
        }

后面还有 443 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。