让我说我得到了这个设置:
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;
这样的参数。这三者之间有什么差异吗?
答案 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对象的方法,则不需要强制转换,也不应该这样做。
其次,它只会以任何方式传递指针,因此它将以相同的速度运行。 唯一的开销是它根据派生类中额外数据的大小调整指针;显然,这并不是速度上可测量的差异。