返回一个实例

时间:2012-05-13 19:55:23

标签: c# xna

可能看起来很愚蠢,但我可以返回一个实例吗? 例如:

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不存在。如何将其传递给所有班级的LoadContentUpdateDraw

2 个答案:

答案 0 :(得分: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; }
}

答案 1 :(得分:2)

你发现另一个答案只是部分正确。

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

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

您存储的属性是基类类型/接口,因此它可以包含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
}