私は、大部分が大きな配列のラッパーであり、関連するハウスキーピングであるクラスを持っています。ref パラメーターを取る関数があります。クラスのインスタンスを関数に渡すときに、配列が送信されるようにします。
明示的なキャストを検討しました。byte[] ref パラメータを持つ関数があるとします。
public void SomeFunction(ref byte[] someBytes);
そして、オーバーロードされた明示的なキャストを持つクラスがあること。
class SomeClass
{
byte[] someBytes;
public static explicit operator byte[](SomeClass someInstance)
{
return someInstance.someBytes;
}
}
今、クラスをパラメーターとして関数を呼び出したい
SomeClass someInstance = new SomeClass();
SomeFunction(ref (byte[]) someInstance);
コンパイラは、「ref または out 引数は割り当て可能な変数でなければなりません」と文句を言います。コンパイラを適切にマッサージできていないだけなのか、それとも本当にそれができないのかはわかりません。
プロパティまたは関数の戻り値を検討しましたが、それらを参照で渡すことはできません (そして、自分自身を教育した後、理由がわかりました...)
配列を public フィールドにしたくないのですが、それはコンパイラを満足させます。配列を参照するローカル変数を作成することもできると思いますが、それは各関数呼び出しの前後に余分なコード行です...
編集: SomeFunction はサードパーティによって作成されたものであり、変更するアクセス権がないことに注意してください。さらに悪いことに、それらのパラメーターを実際に参照する必要はないと思います...