タグ付けされているように、問題がある場合は、.NET ではなく Mono で作業しています。
デリゲートを使用する場合、スコープのベスト プラクティスについて混乱しています。この例では、autoOrientationsとautoRotationSetupsがAwake()以外のクラスの別の場所で使用されることに注意してください。また、Unityを使用する場合、通常はコンストラクターを使用する可能性がある場所でAwake()を使用することが多いことに注意してください。
List<ScreenOrientation> autoOrientations;
Dictionary<ScreenOrientation, Action> autoRotationSetups;
void Awake() {
var verticalOrientations = new List<ScreenOrientation>(
new []{ScreenOrientation.Portrait, ScreenOrientation.PortraitUpsideDown});
Action setAutoRotationsToVertical = () => {
// I don't think this defintion is important for this question,
// but it does use the just-defined List.
};
var horizontalOrientations = new List<ScreenOrientation>(
new []{ScreenOrientation.LandscapeLeft, ScreenOrientation.LandscapeRight});
Action setAutoRotationsToHorizontal = () => {// See last comment.
};
autoRotationSetups = new Dictionary<ScreenOrientation, Action>() {
{ScreenOrientation.Portrait, setAutoRotationsToVertical},
{ScreenOrientation.PortraitUpsideDown, setAutoRotationsToVertical},
{ScreenOrientation.LandscapeLeft, setAutoRotationsToHorizontal},
{ScreenOrientation.LandscapeRight, setAutoRotationsToHorizontal},
}; //...
または、クラス メソッドを定義して、デリゲートに割り当てることもできます。その変更は次のようになります。
List<ScreenOrientation> verticalOrientations, horizontalOrientations;
void SetAutoRotationsToVertical() {}
void SetAutoRotationsToHorizontal() {}
void Awake() {
Action setAutoRotationsToVertical = SetAutoRotationsToVertical;
Action setAutoRotationsToHorizontal = SetAutoRotationsToHorizontal; //...
これら 2 つのアプローチの間で、ボンネットの下で何か異なることが起こっていますか? 私の現在の知識レベルでは、変数がメモリの間違った領域に存在することを主に懸念しています。値型についての真実はそれをクリアするかもしれません。また、どちらか一方に進む他の考えられる理由を認識していないため、この質問です。
最近、私は質問が主観的だと人々が考えたために閉じられているので、私はあなたの意見を尊重しますが、「いいえ」です. 受け入れられる答えでしょう。「はい」は、純粋に文体的な選択ではないことをさらに説明する必要があるでしょう。