using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassInit
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int fff = 123;
            string eee = "aaa";
            InitFunction inf = new InitFunction(fff, eee);
            inf.UserFunction();
            inf.aa = 456;
            inf.bb = "zzz";
            inf.UserFunction();

            // 实例化继承的类
            SenFunction SF = new SenFunction(fff, eee);
            SF.UserFunction();
            SF.PrintArgs();

            Console.ReadKey();
        }
    }
    public class InitFunction
    {
        // 定义的全局变量,供在类方法中传值
        public int aa;
        public string bb;
        // 构造函数和类同名,构造函数的参数即为类初始化时需要的参数,构造函数在类初始化时自动执行
        public InitFunction(int aaa, string bbb)
        {
            Console.WriteLine("现在开始执行构造函数");
            aa = aaa;
            bb = bbb;
            Console.WriteLine("执行基类第一个构造方法");
        }
        // 类方法,需要实例化后才能调用
        public void UserFunction()
        {
            Console.WriteLine($"aa={aa}; bb={bb}");
        }

        // ~开头的函数称为析构函数,析构函数在类在内存中被销毁时自动执行,类似python的__del__方法
        ~InitFunction()
        {
            Console.WriteLine("开始执行析构函数");
        }
    }

    public class SenFunction : InitFunction
    {
        // 继承的类如果的有构造函数的话,通过这种方式继承基类的构造函数
        public SenFunction(int aaa, string bbb) :base(aaa, bbb)
        {
            aa += 1;
            Console.WriteLine("执行子类构造方法");
        }
        public void PrintArgs()
        {
            Console.WriteLine($"from SenFunction aa={aa}; bb={bb}");
        }
    }

}

执行结果

现在开始执行构造函数
执行基类第一个构造方法
aa=123; bb=aaa
aa=456; bb=zzz
现在开始执行构造函数
执行基类第一个构造方法
执行子类构造方法
aa=124; bb=aaa
from SenFunction aa=124; bb=aaa
posted on 2023-01-20 17:10  盈盈的月儿  阅读(24)  评论(0编辑  收藏  举报