2013-04-25 93 views
0

我想重寫一個虛擬函數只爲一個定義的元素(而不必創建另一個類,實現它,然後添加一個函數來覆蓋它..)。C#覆蓋虛擬函數,而不必實現另一個類

例子:

public class MyClass 
{ 
    public virtual bool ChangeStatus(String status) 
    { 
     return false; 
    } 
} 


void test() 
{ 
    //The following is written as an example of what I am trying to achieve & does not work 
    MyClass blah = new MyClass() 
    { 
     public override bool ChangeStatus(String status) 
     { 
      return true; 
     } 
    }; 
} 

任何想法如何實現這一目標?

謝謝。

+0

我不明白你爲什麼要重寫相同的功能相同的類,重寫給相同的簽名功能賦予新的含義,其中類是根據需要繼承的。 – brykneval 2013-04-25 05:37:46

+0

@brykneval:對於API,「void test()」部分將用於不同的程序集。這是否清除它? – LouisTakePILLz 2013-04-25 05:44:26

回答

0

,如果你有超過MyClass控制,可以讓所需的方法調用可以替代在運行時每一個對象的委託......

class MyClass 
{ 
    public void Func<SomeParameterType,SomeReturnType> myDelegate {get;set;} 
    public SomeReturnType myFunction(SomeParameterType parameter) 
    { 
     if(myDelegate==null) 
      throw new Exception(); 
     return myDelegate(parameter); 
    } 
} 

... 

MyClass obj = new MyClass(); 
SomeParameterType p = new SomeParameterType(); 
obj.myDelegate = (x)=>new SomeReturnType(x); 
SomeReturnType result = obj.myFunction(p); 
+0

這幾乎是我所期待的,甚至認爲,這不是我直接問到的。每當有時間我都會試試這個。編輯:可悲的是,我沒有足夠的聲望來「解決」你的答案。 – LouisTakePILLz 2013-04-25 05:34:08

+0

爲什麼要創建相關的委託類?在命名空間中定義它... – 2013-04-25 05:36:43

+0

@ bash.d:我正在使用這個API ...我不知道這是否回答你的問題......是嗎? – LouisTakePILLz 2013-04-25 05:41:48

1
0

C#是嚴格建立在類的概念。你不能創建一個沒有類的函數/方法。
此外,virtual/override意味着繼承,所以你必須從這個類派生。

+0

這不完全是真的......你可以有一個沒有圍繞它的類的功能/方法...想到代表 – DarkSquirrel42 2013-04-25 05:23:14

+0

這與問題完全沒有關係......這是關於重寫不創建代表或東西! – 2013-04-25 05:27:35

+0

確定的事情...... op說他是**試圖**重寫......那是行不通的......然後他要求**任何關於如何實現效果的想法...... – DarkSquirrel42 2013-04-25 05:32:57

0

你不能override沒有inheriting the class函數,virtual function整點是,它可以在child classoverridden

如果你正在使用同一個類來完成它,你會不會最終爲這個類寫一個簡單的方法/函數?

所以,遵循OOP編程概念,它被設計爲簡單&易於編程Instead simply inherit the class and override the function

+0

其實,他們不在課堂上。我在原始文章中寫的片段沒有任何上下文,它既不包含在命名空間中,也不包含在父類中,它只是展示我想要實現的內容。 – LouisTakePILLz 2013-04-25 05:32:04