1

bool、int、floatの値(および選択したタイプと名前)を保持するクラスがあります。

using UnityEngine;
using System.Collections;

[System.Serializable]
public class AnimXVariable {

        public string name = "variable";
        public enum VariableType { Bool, Int, Float };
        public VariableType type = VariableType.Bool;

        public bool boolVal = false;
        public int intVal = 0;
        public float floatVal = 0f;

        public AnimXVariable() {
                type = VariableType.Bool;
        }
        public AnimXVariable(VariableType newType) {
                type = newType;
        }
        public AnimXVariable(string newName, VariableType newType, bool val) {
                name = newName;
                type = newType;
                boolVal = val;
        }
        public AnimXVariable(string newName, VariableType newType, float val) {
                name = newName;
                type = newType;
                floatVal = val;
        }
        public AnimXVariable(string newName, VariableType newType, int val) {
                name = newName;
                type = newType;
                intVal = val;
        }       
        public AnimXVariable(bool newValue) {
                if(type == VariableType.Bool) boolVal = newValue;
        }
        public AnimXVariable(float newValue) {
                if(type == VariableType.Float) floatVal = newValue;
        }
        public AnimXVariable(int newValue) {
                if(type == VariableType.Int) intVal = newValue;
        }

        public static implicit operator AnimXVariable(bool val) {
                return new AnimXVariable(name, type, val); //The problem is I can't access the non-static members. If I simply return new AnimXVariable(val); it does work, but the name is gone...
        }

}

暗黙の演算子を使用して、次の機能を実行しようとしています。

AnimXVariable b = new AnimXVariable("jump", VariableType.Bool, false);
b = true;

問題は、非静的メンバーにアクセスできないことです。単に新しいAnimXVariable(val);を返す場合。それは機能しますが、名前はなくなりました...これを機能させるために暗黙の演算子コード内のオブジェクトに関する情報を取得する方法はありますか?

4

1 に答える 1

6

問題は、非静的メンバーにアクセスできないことです。

いいえ、できません。コンテキストはありません。bool値をに変換しようとしているだけですAnimXVariableそこにあるすべての入力データです。あなたは「オブジェクト」について話します-オブジェクトはありません。

別の言い方をすれば、暗黙の演算子を使用すると、次のように記述できるはずです。

AnimXVariable b = true;

それはどういう意味ですか?名前は何ですか?

ここで暗黙の変換演算子を使用することを再考することを強くお勧めします。おそらく次のようなインスタンスメソッドが必要なようです。

public AnimXVariable WithValue(bool newValue)
{
    return new AnimXVariable(name, type, newValue);
}
于 2013-01-03T09:57:00.717 に答える