所以基本上我有一个对象需要实例并将它们添加到列表中。每个实例都使用虚拟方法,一旦创建实例,我需要重写这些方法。我将如何去重写实例的重写方法?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所说,可以很好地使用与会代表。 –