0

さて、これは奇妙な質問かもしれませんが、これで終わりです。次のコードは非常に一般的な擬似コードですが、これは C# で行われます。

次のようなクラスがあるとします。

public class Animal()
{
various methods and members here...

public Animals getSpecificAnimal(ref animalList,animalType, ref int whichAnimal)
{
//The logic in here will find your specifi animal, as well as the index of it in the list 

return Animal;
}

public void replaceSpecifiAnimal(ref animalList,Animal newAnimal, int whichAnimal)
{
//The assumption here is that you know the index of the specific animal you
//want to replace in the list.

animalList.RemoveAt(whichAnimal);
animalList.Add(newAnimal);

 }
}

public class Cat:Animal
{
}

public class Dog:Animal
{
}

public class Fish:Animal
{
}

これで、これらの動物のリストを次のように作成し、いくつかのクラスで使用しています。

var animalList = new List<Animal>();

次に、犬、猫、魚などの動物を追加しました。ここで、Fish を別の魚に置き換えたいので、次のようにします。

animalList[0].getSpecificAnimal(ref animalList, Fish,ref whichAnimal);

animalList[0].replaceSpecifiAnimal(ref animalList,newFish,whichAnimal);

これにより、古い魚が新しい魚に置き換えられます。

それでは、次の質問に移ります: リスト内の何かを使用してリストを変更することの危険性は何ですか?

このコードは、ええと...その実際のバージョンは機能します。コンパイルして問題なく動作します。しかし、ちょっとした難読化よりも大きな危険を求めているように感じずにはいられません。(この場合) Fish がインデックス 0 であっても、コードは機能することに注意してください。

このようにコーディングしたのには理由があります。animalList に作用するメソッドを別のクラスに配置することもできますが、そうしないことの利点は、animalList を渡すことができ (データが入力されたら)、すべて自己完結型であることです。

考え?

4

2 に答える 2

0

これが私の考えです。


getSpecificAnimalandreplaceSpecifiAnimalを静的メソッドとして宣言します。

public static void replaceSpecifiAnimal(...)

そうすれば、インスタンスなしでそれらを呼び出すことができます

Animal.replaceSpecifiAnimal(...);

refすべてのキーワードを取り除きます。あなたの例では、彼らはあなたのために何もしません。

于 2013-09-24T18:48:36.573 に答える