2014-03-25 30 views
0

我编程休假控制公司的程序(只学习,不严重)。现在我有一个叫做Employee的抽象类。和4个阶段的员工。C#代表在抽象和子类

每个人都有它自己的类:

  • NormalWorker
  • SubjectAreaLeader
  • ChefHumanResourceOfficer
  • CEO

的普通工人可以要求休假时,SAL可以说确定或否认请求。如果他说好的话就会去CHRO。他可以否决或通过它。 CEO的最后一个实例谁可以否决它。

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

public delegate void applyVacations(Vacation what_vacations, bool pass_or_deny) 

代表所有子类有一个方法

void apply(Vacation what_vacation, bool pass_or_deny) 

除了NormalWorker的。和子类的构造函数应推此方法适用于委托。

传递休假请求对所有实例都是最终的。

实施例:

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*/} 
    } 

} 

问候

+3

'foo = childFoo;'没有任何意义 - 'foo'是* type *,而不是变量...你不能给它赋值。另外,请一个问题,格式化代码时多加小心 - 压痕是所有在这里的地方。 –

回答

0

foo是委托因此它在乙构造类型

应该写

FOO处理机= childfoo;

,那么你可以调用处理程序()

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 
+0

你能提供一个代码示例? – aevitas

+0

我这样做了: 抽象类A {public delegate void foo(); foo调用;} 在B的构造函数中我{base.call = childfoo;} – SepGuest

2

您需要创建foo类型的变量,然后分配childfoo它,像这样:

private foo _handler; 
    public B() 
    { 
     // Assign our handler for the foo delegate. 
     _handler = childfoo; 

     // Now we can call it. 
     _handler(); 
    }