使用interface作为参考是否会对性能产生影响

时间:2017-10-23 01:25:39

标签: c# performance interface reference abstract-class

在性能方面哪个更好:
1.)通过基类的引用引用对象

abstract class BaseClass{}

class A : BaseClass{}
class B : BaseClass{}

static void Main(){
 BaseClass objectInstance = new A();
           objectInstance = new B();
}


2.)通过接口引用引用对象:

 interface IBase{}

 class A : IBase{}
 class B : IBase{}

 static void Main(){
    IBase objectInstance = new A();
    objectInstance = new B();
}

2 个答案:

答案 0 :(得分:0)

可能存在时间/速度性能问题,但如果您使用小型集合,则差异可以忽略不计。如果您使用列表作为参数,请使用iList代替您。这取决于您。这是一个参考... https://github.com/dotnet/coreclr/issues/9105

答案 1 :(得分:-1)

影响是微观的,在您编写真正性能关键的代码段之前,您可能不会注意并使用最适合您需求的内容。

但是,有一种情况可能会遇到界面性能问题。当你有一个接受接口作为参数的方法并且你有一个实现接口的结构时,就会发生这种情况。

class Demo {
    public static void Method<T>(T input) where T: IInterface {};
}

此类代码将导致struct的装箱。您应该考虑使用带有约束的泛型来避免装箱

{{1}}