C# 用C实现这个类的最好方法是什么#

C# 用C实现这个类的最好方法是什么#,c#,.net,C#,.net,我有一个类(我们称之为foo),它包含20个成员。这个类有一个方法 public foo Rotate(双角度) 此方法以一定角度旋转调用对象,并创建一个新的foo对象。新对象的10个成员始终与调用对象相同 实现这个类的最佳方法是什么,这样我就不必每次调用Rotate方法时都重新计算所有20个成员?假设可以在类之外更改类属性,我认为最好的解决方案是 这本质上意味着在类中定义一个构造函数,将同一类的对象作为参数,然后将该对象的所有属性复制到一个新对象中 由于您所做的只是分配值,因此效率没有问题(假

我有一个类(我们称之为
foo
),它包含20个成员。这个类有一个方法
public foo Rotate(双角度)

此方法以一定角度旋转调用对象,并创建一个新的
foo
对象。新对象的10个成员始终与调用对象相同


实现这个类的最佳方法是什么,这样我就不必每次调用Rotate方法时都重新计算所有20个成员?

假设可以在类之外更改类属性,我认为最好的解决方案是

这本质上意味着在类中定义一个构造函数,将同一类的对象作为参数,然后将该对象的所有属性复制到一个新对象中

由于您所做的只是分配值,因此效率没有问题(假设值是原语)

然后,初始化新对象后,将10个不同的属性设置为它们的旋转对应项

您可以使用对所有字段进行浅层复制:

public class Foo
{
   public Foo Rotate(int angle)
   {
       var newInstance = (Foo)this.MemberwiseClone();
       // do other stuff...
       return newInstance; 
   }
}

如果这20个字段是值类型,则应设置。如果不是,则使用复制构造函数可能更安全。

重新计算所有成员可能比尝试缓存它们更简单、更快。这取决于计算的复杂程度。缓存会增加额外的复杂性,所以您可能应该确保您确实需要它。@如果您误用了它。。这里没有什么可尝试的——他显然可以实现一个具有20个参数的构造函数,但他在问是否有更优雅的方法来实现它。在我看来,这是一个非常有效的问题。旋转方法会被多次调用,并且会占用整个计算的大量时间。我不太理解旋转方法的全部用途-它旋转对象并返回一个新对象?丹尼尔,你是对的。想想foo是由许多形状组成的,每次它旋转时都会生成一个新的foo