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?");
}

我在哪里可以设置与年龄的预绘制方法完全不同的名称方法?

C# Set Methods?

你可以用抽象方法制作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");});
}