我有一个 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...
}
}
MyClass2 的问题在于byte[]
to 和 from的转换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 中实现的?在这两个平台上都会有任何性能影响吗?
谢谢!