0

特定の基本型であることが強制される型を渡す方法があるかどうか疑問に思っていました。たとえば、私のゲーム エンジンには、属性リスト (controllable、rigidBody など) があります。新しいオブジェクトを取る addAttribute パラメータがあります。ただし、代わりに自分で新しいオブジェクトを作成できる型を取るオーバーロードも必要です。たとえば

public void addAttribut(Type attribute)

おそらくlinqを実装する何かを考えていますか?試してみましたが、「where」はジェネリックでのみ使用できるようです:

public void addAttribute(Type attribute) where attribute : Attribute

関数のシグネチャになります。私は、Unity がこれを行っていると信じています。ただし、Mono を介してこれを実行できる可能性があります。

正しい基本型でない場合は、いつでも例外をスローできます。しかし、プログラマーが間違った時間に一緒に通過するのを防ぐ方法があるかどうか疑問に思っていました.

何か案は?どんな助けでも大歓迎です!

4

1 に答える 1

0

コードを呼び出してコンパイル時に型を知る必要がある場合は、型パラメーターを使用してジェネリックメソッドにすることができます。

public void AddAttribute<T>() where T : Attribute
{
    // Use typeof(T)
}

または、以下を呼び出すことができるパラメーターなしのコンストラクターを強制します。

public void AddAttribute<T>() where T : Attribute, new()
{
    T t = new T();
    ...
}

しかし、そうでなければ、それを行う方法はありません。他の方法と同じように、実行時に引数を検証する必要があります。

于 2012-11-20T15:45:50.033 に答える