C# Set Methods?
本文关键字:Methods Set | 更新日期: 2023-09-27 18:34:41
有没有办法为一个类设置不同的方法?那么,对于类的不同实例,这里的 preDraw 和 postDraw 方法是否不同?
class Scene
{
public string text;
public void preDraw() { }
public void postDraw() { }
Button[] buttons;
public Scene(string text)
{
}
}
static class Scenes
{
public static Scene name = new Scene("What is your name?");
public static Scene age = new Scene("How old are you?");
}
我在哪里可以设置与年龄的预绘制方法完全不同的名称方法?
你可以用抽象方法制作Scene
和抽象类,然后让Scene
的每个实现都必须有自己的方法实现。
abstract class Scene
{
public string text;
public abstract void preDraw();
public abstract void postDraw();
Button[] buttons;
public Scene(string text)
{
}
}
要处理这个问题,你应该使用继承。
我也会使用虚拟方法,因为您可能希望它已经在基类中编写。
我建议您创建一个基类:
public class Scene
{
public string text;
public virtual void preDraw() { }
public virtual void postDraw() { }
protected Button[] buttons;
public Scene(string text)
{
}
}
然后我会创建继承自Scene
的类:
public class NameScene : Scene
{
public override void preDraw() { }
public override void postDraw() { }
}
和
public class AgeScene : Scene
{
public override void preDraw() { }
public override void postDraw() { }
}
最后像这样使用它:
static class Scenes
{
public static Scene name = new NameScene("What is your name?");
public static Scene age = new AgeScene("How old are you?");
}
请注意,如果在继承的类中,没有必要进行代码修改,您可以跳过这些方法。
除了我不确定这是不是好方法(您可能希望对使用多态性感兴趣(,如果您真的想为每个实例有不同的方法实现,您可以使用委托:
class Scene
{
public string text;
public Action PreDraw {get; set;}
public Action PostDraw {get; set;}
public Scene(string text, Action preDraw)
{
text = text;
PreDraw = preDraw;
}
}
static class Scenes
{
public static Scene name = new Scene("What is your name?", () => Console.WriteLine("PreDraw the name."));
public static Scene age = new Scene("How old are you?", () => Console.WriteLine("PreDraw the age."));
}
在您的情况下,最佳实践:您必须使用多态性MSDN
你的意思是你想让每个实例都有自己的方法吗?您可以使用委托来执行此操作。
class Scene
{
public string text;
public Action preDraw{get;set; }
public Action postDraw{get;set; }
Button[] buttons;
public Scene(string text)
{
}
}
static class Scenes
{
public static Scene name = new Scene("What is your name?");
name.preDraw=new Action(()=>{Console.WriteLine("preDraw by name");});
name.postDraw=new Action(()=>{Console.WriteLine("postDrawby name");});
public static Scene age = new Scene("How old are you?");
age.preDraw=new Action(()=>{Console.WriteLine("preDraw by age");});
age.postDraw=new Action(()=>{Console.WriteLine("postDrawby age");});
}