1

可能看起来是一个愚蠢的问题,但我可以返回一个实例吗?例子:

public class EcranJeu : AffichageJeu
{

    public EcranJeu(string choixecran)
    {
        if (choixecran == "0")
        {
            KystExtract décor = new KystExtract();
        }
        if (choixecran == "1")
        {
            KystExtraction décor = new KystExtraction();
        }
    }

    public override void  LoadContent()
    {
        décor.LoadContent(content);
    }
}

décor据说不存在。我怎样才能将它传递给LoadContent,UpdateDraw所有班级?

4

2 回答 2

3

如果我理解正确,您只想在构造函数中创建一个实例成员并在 LoadContent、Update 和 Draw 中访问它?

public class EcranJeu : AffichageJeu
{
    private KystExtract décor;
    public EcranJeu(string choixecran)
    {
        if (choixecran == "0")
        {
            décor = new KystExtract();
        }
        if (choixecran == "1")
        {
            décor = new KystExtraction();
        }
    }

    public override void  LoadContent()
    {
        décor.LoadContent(content);
    }
}

如果您想从其他实例访问属性,而不是创建 getter 和 setter 或将属性声明为 public。

private KystExtract _décor;
public public string décor
{
    //set the person name
    set { this._décor = value; }
    //get the person name 
    get { return this._décor; }
}
于 2012-05-13T20:36:05.520 回答
2

正如您发现的那样,另一个答案只是部分正确。

问题:您正在创建两个不同类之一的对象,然后想要在所选对象上调用LoadContent()Draw()或方法。Update()

我必须假设这两个类KystExtractKystExtraction有一个共同的基类或共享一个接口。如果没有,您将需要创建/添加一个(例如KrystBase或 IKryst)来定义该LoadContent()方法。

然后,您存储的属性属于基类类型/接口,因此它可以包含KystExtract对象或KystExtraction对象。

您的代码将如下所示(假设您没有公共基类并使用接口):

public class EcranJeu : AffichageJeu
{
    private IKystObject décor;  // for example
    public EcranJeu(string choixecran)
    {
        if (choixecran == "0")
        {
            décor = new KystExtract();
        }
        if (choixecran == "1")
        {
            décor = new KystExtraction();
        }
    }

    public override void  LoadContent()
    {
        décor.LoadContent(content);
    }
}

// Common interface for classes requiring shared behavior
public interface IKystObject
{
    public override void LoadContent();
    public override void Update();
    public override void Draw();
}

// Both classes implement your common interface
public class KystExtract : IKrystObject
{
    ... Implementation of LoadContent, Update and Draw
}

// Both classes implement your common interface
public class KystExtraction : IKrystObject
{
    ... Implementation of LoadContent, Update and Draw
}
于 2012-05-14T15:01:07.933 回答