吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2004|回复: 4
收起左侧

[学习记录] C# 学习笔记 抽象类

[复制链接]
Cool_Breeze 发表于 2021-4-2 15:34
本帖最后由 Cool_Breeze 于 2021-4-2 15:45 编辑

C# 部分类

partial 修饰符

partial class Program 在别处在定义一个 相同类(相同命名空间), 编译器自动将其合并为一个类

C# 抽象类

事件定义声明

EEE

public delegate void EEE(string flag, int n); // 事件(类型)定义声明

定义一个抽象类

关键字 abstract

public abstract class Duck // 抽象类
{
    protected int x;
    public abstract int X {get; set;} // 抽象属性
    public abstract void Aget(int n); // 抽象方法
    public abstract event EEE eevent; // 抽象事件
    public abstract string this[int index]{get; set;}  // 抽象索引

}

定义抽象属性

public abstract int X {get; set;} // 抽象属性

定义抽象方法

public abstract void Aget(int n); // 抽象方法

定义抽象事件

public abstract event EEE eevent; // 抽象事件

定义抽象索引

public abstract string this[int index]{get; set;}  // 抽象索引

实现抽象类

实现抽象属性

public override int X // 重写属性
{
    get
    {
        OnEevent("Get", x); // 这里访问 X 才会触发, 直接访问 x 将不会触发
        return x;
    }
    set
    {
        x = value;
        OnEevent("Set", x); // 同理, x 初始值为 0 是也不会触发
    }
}

实现抽象方法

public override void Aget(int n) // 重写方法
{
    X = n;
}

实现抽象事件

new  REevent 一个事件代替抽象事件,使抽象事件操作新事件 REevent

private event EEE REevent; // 事件
public override event EEE eevent // 重写事件
{
    add
    {
        REevent += value;

    }
    remove
    {
        REevent -= value;
    }
}
事件订阅

我这里是在类构造函数里面订阅的

public RealDuck()
{
    eevent += SetValue; // 事件订阅
    eevent += GetValue; // 事件订阅
}
事件处理和响应
响应
public void OnEevent(string flag, int n) // 事件触发
{
    if (REevent != null)
        REevent(flag, n);
}
处理
public void GetValue(string flag, int n)
{
    if (flag == "Get")
        Console.WriteLine("x 的值 {0} 被获取了", n);
}

public void SetValue(string flag, int n)
{
    if (flag == "Set")
        Console.WriteLine("x 的值被设置为 {0}", n);
}
事件触发

OnEeventXgetset 两个方法被调用时触发

public override int X // 重写属性
{
    get
    {
        OnEevent("Get", x); // 这里访问 X 才会触发, 直接访问 x 将不会触发
        return x;
    }
    set
    {
        x = value;
        OnEevent("Set", x); // 同理, x 初始值为 0 是也不会触发
    }
}

实现抽象索引

private string[] StrArray = {"A", "B", "C"};
public override string this[int index] // 重写索引器
{
    get
    {
        if (index > StrArray.Length && index < 0)
            return null;
        else return StrArray[index];
    }
    set
    {
        if (index < StrArray.Length && index >= 0)
            StrArray[index] = value;
    }
}

完整代码


[C#] 纯文本查看 复制代码
using System;

namespace TestA
{
    public delegate void EEE(string flag, int n); // 事件声明定义
    partial class Program
    {
        
        static void Main()
        {
            Print();
            Duck ya = new RealDuck();
            ya.Aget(2);
            ya.X = 100;
            ya.Aget(111);
            Console.WriteLine(ya.X);
            Console.WriteLine(ya[2]);
            
            // output:
            // Program 部分类方法
            // x 的值被设置为 2
            // x 的值被设置为 100
            // x 的值被设置为 111
            // x 的值 111 被获取了
            // 111
            // C
        }
    }
    
}

namespace TestA // 两个命名空间合并
{
    partial class Program
    {
        
        static void Print()
        {
            Console.WriteLine("Program 部分类方法");
        }
        
    }
    
    public abstract class Duck // 抽象类
    {
        protected int x;
        public abstract int X {get; set;} // 抽象属性
        public abstract void Aget(int n); // 抽象方法
        public abstract event EEE eevent; // 抽象事件
        public abstract string this[int index]{get; set;}  // 抽象索引
        
    }
    
    class RealDuck : Duck // 多态
    {
        private string[] StrArray = {"A", "B", "C"};
        private object eLock = new object();
        private event EEE REevent; // 事件
        
        public override event EEE eevent // 重写事件
        {
            add
            {
                REevent += value;
                
            }
            remove
            {
                REevent -= value;
            }
        }
        
        public override string this[int index] // 重写索引器
        {
            get
            {
                if (index > StrArray.Length && index < 0)
                    return null;
                else return StrArray[index];
            }
            set
            {
                if (index < StrArray.Length && index >= 0)
                    StrArray[index] = value;
            }
        }
                
        public void OnEevent(string flag, int n) // 事件触发
        {
            if (REevent != null)
                REevent(flag, n);
        }

        public RealDuck()
        {
            eevent += SetValue; // 事件订阅
            eevent += GetValue; // 事件订阅
        }
        
        public override int X // 重写属性
        {
            get
            {
                OnEevent("Get", x); // 这里访问 X 才会触发, 直接访问 x 将不会触发
                return x;
            }
            set
            {
                x = value;
                OnEevent("Set", x); // 同理, x 初始值为 0 是也不会触发
            }
        }

        
        public override void Aget(int n) // 重写方法
        {
            X = n;
        }
        
        public void GetValue(string flag, int n)
        {
            if (flag == "Get")
                Console.WriteLine("x 的值 {0} 被获取了", n);
        }
         
        public void SetValue(string flag, int n)
        {
            if (flag == "Set")
                Console.WriteLine("x 的值被设置为 {0}", n);
        }
    }
}

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
迷恋自留地 + 1 我很赞同!
小脚jio + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

学习让我快乐 发表于 2021-4-2 15:57
学习学习                                          
cjx603964937 发表于 2021-4-2 16:20
cnzefe 发表于 2021-4-2 16:34
xingxing901015 发表于 2021-4-4 17:07
努力学习,争取能懂,哈哈
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 05:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表