3

クラスの宣言されたエンティティがあり、テンプレートを変更せずに、事前に作成されたさまざまなテンプレートをそれに割り当てたいと考えています。const を使用してもうまくいかないようです。

例:

Weapon w1;
w1 = Sword; // premade weapon.
w1.reducedamage(1); // for example a debuff

この場合、既製の武器のダメージが減少し、テンプレートとして使用できなくなります。この問題は、敵に対してより深刻になります。

例:

Enemy enemy;
enemy = enemies[r] // r being a randomly generated integer and enemies a list of enemy templates
Fight(player,enemy); // this method would resolve a fight between the two entities of the type Character.

この問題は、プレーヤー クラスでは見えません。プレーヤーはすべてのゲーム メソッドに沿って渡される単一の参照であるためです。プレーヤーは 1 つしかないためです。プレイヤーが戦うたびに、敵のテンプレートが「破損」します。

一般に、常に値渡しを行うテンプレートまたはクラス/構造体を作成するにはどうすればよいでしょうか。つまり、最初のクラスのプロパティは 2 番目のクラスと同じ値を持ち、2 つのクラス間に関係はありません。

これで得た唯一の成功は、テンプレートを持つすべてのクラスの各属性を同じクラスの別のエンティティに手動でコピーするメソッドを作成することです。しかし、新しいクラスが追加されたり、古いクラスが変更されたりするたびに常にアップグレードする必要があるため、これは非常に非現実的です。

4

6 に答える 6

0

あなたの質問に直接答える回答を書きました。しかし、あなたが望むのは、同じであるがリンクされていないアイテムを作成することだけであることがわかりました。

インスタンスを作成すると、とにかくそれが起こります。何もする必要はありません。

あなたが持っている場合:

class Class1
{
    public int i;
}

それで:

Class1 c1 = new Class1() { i = 1 };
Class1 c2 = new Class1() { i = 2 };
Text = c1.i.ToString();

「2」ではなく「1」を出力します。

そして、サブクラス「Friend」と「Foe」を持つ「Player」クラスが必要な場合-それが継承の目的です。

class Player
{

}

class Friend : Player
{

}
class Foe : Player
{

}

編集:

おそらく、これはタスクをより簡単にするでしょう: (「複製」メソッド)

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Class1 c1 = new Class1() { i = 1, j = 2 };
        Class1 c2 = Duplicate(c1);
        c1.i = 3;
        Text = c2.i.ToString();//Prints "1";
    }

    public Class1 Duplicate(Class1 c)//Duplicates all public properties.
    {
        Class1 result = new Class1();
        PropertyInfo[] infos = typeof(Class1).GetProperties();
        foreach (PropertyInfo info in infos)
            info.SetValue(result, info.GetValue(c, null), null);
        return result;
    }
}

public class Class1
{
    public int i { get; set; }
    public int j { get; set; }
}
于 2012-12-24T17:40:23.297 に答える