派生类,参数和性能

时间:2013-02-23 19:44:44

标签: c#

让我说我得到了这个设置:

class MainInfo
{
    public string path{get;set;}
    public string name{get;set;}
}

class MoreInfo : MainInfo
{
    // more variables and methods
}

在另一个类中,我将MoreInfo类声明为public MoreInfo info;

在其他一些方法中,我只需要MainInfo信息,现在我想要知道的是,如果我将info转换为 MainInfo的其他方法,那么会有任何性能差异吗所以: (MainInfo)info作为一个参数,只是传入整个info,然后在方法中只获取我需要的信息?

谢谢!

修改 或者,如果我传递像MainInfo in = (MainInfo)info;这样的参数。这三者之间有什么差异吗?

4 个答案:

答案 0 :(得分:2)

如果方法采用MainInfo,则不需要转换任何继承类型 - 只需直接传递它。

至于表现 - 这不是你可能遇到的问题。这将是微观微观优化,几乎任何软件都可以进行更大的优化。

答案 1 :(得分:1)

演员有一些性能成本,但你知道:过早优化是任何开发的恶魔。

制定您的设计决策,然后关注优化。如果您的方法需要更具体的MoreInfo实例,因为它需要访问整个信息,那么将下载的对象提供给MoreInfo可能是一个不错的选择。如果没有,只需将对象保留为,并输入MainInfo

答案 2 :(得分:1)

铸造有性能差异,但我认为它不够重要。对你的班级进行了测试,结果是没有施放的2218个刻度和铸造的135个刻度。我相信这是因为它在编译期间处理演员表。希望这有帮助!

System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
testmethod(info);
watch.Stop();
Console.WriteLine(watch.ElapsedTicks);  // 2218 ticks

watch.Restart();
testmethod((MainInfo)info);
watch.Stop();
Console.WriteLine(watch.ElapsedTicks); // 135 ticks

答案 3 :(得分:0)

首先,如果要将一个MoreInfo对象传递给期望MainInfo对象的方法,则不需要强制转换,也不应该这样做。

其次,它只会以任何方式传递指针,因此它将以相同的速度运行。 唯一的开销是它根据派生类中额外数据的大小调整指针;显然,这并不是速度上可测量的差异。