所以基本上我有一個對象需要實例並將它們添加到列表中。每個實例都使用虛擬方法,一旦創建實例,我需要重寫這些方法。我將如何去重寫實例的重寫方法?C#重寫實例方法
Q
C#重寫實例方法
3
A
回答
14
你不行。定義類時只能覆蓋方法。
最好的辦法是轉而使用適當的Func
委託作爲一個佔位符,並允許呼叫者提供實現這種方式:一旦對象被創建,你不能改變的行爲
public class SomeClass
{
public Func<string> Method { get; set; }
public void PrintSomething()
{
if(Method != null) Console.WriteLine(Method());
}
}
// Elsewhere in your application
var instance = new SomeClass();
instance.Method =() => "Hello World!";
instance.PrintSomething(); // Prints "Hello World!"
0
C#是靜態的物體。你可以使用inhertance繼承一個超類,但這是在設計時完成的,而不是運行時完成的。
class foo
{
public virtual void dosomething()
{
console.writeline("this is foo");
}
}
class bar : foo
{
public override void dosomething()
{
console.writeline("this is bar");
}
}
var list = new Foo[]{new foo(), new bar()};
還有AOP概念 - 面向方面的編程。這是您可以在運行時開始注入行爲的地方。有2個框架,我意識到這樣做
- 城堡動態代理
- Spring.Net
+0
我已經考慮過這個,但是我不知道將會定義多少個對象類型。 – tsturzl
0
這是不可能的運行。一旦它被實例化,你就不能改變一個類的行爲。然而你可以看看創建一個委託方法。
編輯,剛纔看到的第一個答案,去與;)
相關問題
- 1. 從類的實例重寫方法
- 2. 如何在C#中的對象的實例中重寫方法
- 3. c#實例方法
- 4. 實例C覆蓋方法#
- 5. Objective C - 類方法,實例方法
- 6. 靜態方法和實例方法C#
- 7. C++和虛方法重寫
- 8. C#重寫GetHashCode方法
- 9. 重寫contains()方法C#
- 10. C++方法指針重寫方法
- 11. C# - 強制重寫的方法被父級調用,而不是實例
- 12. 如何正確地重寫Ruby中的實例方法?
- 13. Java繼承方法重寫實例變量
- 14. 如何在Kotlin中實例化對象時重寫方法?
- 15. 實例的一類將不運行的重寫方法
- 16. 從子實例調用基類的方法已被重寫
- 17. Python重寫類(不是實例)特殊方法
- 18. 在Python中的實例方法中重寫函數
- 19. Java實例方法:不只是重寫,但也隱藏
- 20. 重寫一個類的實例的方法?
- 21. 創建類的新實例時的Java重寫方法
- 22. 如何在Swift中重寫協議擴展的實例方法?
- 23. 調用實例方法的實例方法調用實例方法
- 24. 實例和方法隱藏:重點是?
- 25. 重構實例聲明中的方法
- 26. 重寫方法
- 27. 重寫方法
- 28. 重寫方法
- 29. 實現_del_方法與__getattribute__重寫
- 30. 遞歸實踐:重寫DOM方法
不重寫的_instance_的方法,你重寫_class_的方法。如果您需要重寫方法,請使用重寫的方法定義子類並創建這些子類的實例。 –
也許重寫不是來自OP的單詞的最佳選擇,但他們想要做的是一個有效的想法,實質上他們希望能夠在運行時改變功能,正如@JustinNiessner所說,可以很好地使用與會代表。 –