c#抽象和子类中的委托

本文关键字:子类 抽象 | 更新日期: 2023-09-27 17:52:52

我正在为公司编写假期控制程序(只是学习,不认真)。现在我有了一个名为Employee的抽象类。员工的4个阶段

每个人都有自己的类:

  • NormalWorker
  • SubjectAreaLeader
  • ChefHumanResourceOfficer
  • CEO

Normal Worker可以请求休假,SAL可以说ok或拒绝请求。如果他同意,就交给CHRO。他可以否决也可以通过。CEO是最后一个可以否决它的人。

所有类都继承抽象类。抽象类有一个名为

的委托
public delegate void applyVacations(Vacation what_vacations, bool pass_or_deny)

所有子类都有一个方法

void apply(Vacation what_vacation, bool pass_or_deny)

除了NormalWorker。并且子类的构造函数应该将这个apply方法推送给委托。

通过休假请求对所有实例都是最终的。

的例子:

namespace ex
{
    public abstract class A
    {
        public delegate void foo();
        public A()
        { }
    }
    class B : A
    {
        public B()
        {
            A.foo = childfoo;  // Does not work
        }
        public void childfoo()
        {/* Do something*/}
    }
}

问候

c#抽象和子类中的委托

您需要创建一个类型为foo的变量,然后将childfoo分配给它,如下所示:

    private foo _handler;
    public B()
    {
        // Assign our handler for the foo delegate.
        _handler = childfoo;
        // Now we can call it.
        _handler();
    }

foo是一个委托所以它是一个类型

在B构造函数中,你应该写

则可以调用handler()

namespace ex
{
    public abstract class A
    {
        public delegate void foo();
        public A()
        { }
    }
    class B : A
    {
        private foo handler;
        public B()
        {
            handler = childfoo;
        }
        public void callHandlerHere()
        {
            handler();
        }
        public void childfoo()
        {/* Do something*/}
    }
}

这是课程的一个例子

B b = new B();
b.callHandlerHere() // all object inheriting A can habe a callHandlerHere function for exemple