-2

可以说我设置了这个:

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)infoinfo

谢谢!

编辑: 或者如果我传递这样的参数MainInfo in = (MainInfo)info;。这三个有区别吗?

4

4 回答 4

2

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

至于性能 - 这不是您可能遇到的问题。这将是一个微优化,并且几乎在任何软件中都会有更大的可能优化。

于 2013-02-23T19:50:01.940 回答
1

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

做出设计决策,然后再关注优化。如果您的方法需要一个更具体的MoreInfo实例,因为它需要访问整个信息,那么将向下转换的对象提供给MoreInfo. 如果没有,只需将对象保持原样进行MainInfo打字。

于 2013-02-23T19:50:21.010 回答
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
于 2013-02-23T20:04:16.200 回答
0

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

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

于 2013-02-23T19:49:53.677 回答