型として宣言された特定のメソッド パラメーターを持つ C# インターフェイスがありobject
ます。ただし、渡される実際の型は、インターフェイスを実装するクラスによって異なる場合があります。
public interface IMyInterface
{
void MyMethod(object arg);
}
public class MyClass1 : IMyInterface
{
public void MyMethod(object arg)
{
MyObject obj = (MyObject) arg;
// do something with obj...
}
}
public class MyClass2 : IMyInterface
{
public void MyMethod(object arg)
{
byte[] obj = (byte[]) arg;
// do something with obj...
}
}
byte[]
MyClass2 の問題は、 to と fromの変換が boxing と unboxing であることですobject
。これは、パフォーマンスに影響を与える計算コストの高い操作です。
この問題を汎用インターフェイスで解決すると、ボックス化/ボックス化解除が回避されますか?
public interface IMyInterface<T>
{
void MyMethod(T arg);
}
public class MyClass1 : IMyInterface<MyObject>
{
public void MyMethod(MyObject arg)
{
// typecast no longer necessary
//MyObject obj = (MyObject) arg;
// do something with arg...
}
}
public class MyClass2 : IMyInterface<byte[]>
{
public void MyMethod(byte[] arg)
{
// typecast no longer necessary
//byte[] obj = (byte[]) arg;
// do something with arg...
}
}
これは .NET と Mono でどのように実装されていますか? どちらのプラットフォームでもパフォーマンスへの影響はありますか?
ありがとうございました!