2014-03-25 27 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(); 
    }