从其成员函数返回一个类

时间:2011-12-08 08:07:12

标签: c#

是否可以定义一个成员函数,其返回类型与作为成员的类相同。

例如:

public class Cars
{
 int Model
 int Make

  Cars CreateDeepCopy()
   {
       using (var ms = new MemoryStream())
      {
           var formatter = new BinaryFormatter();
           formatter.Serialize(ms, this);
           ms.Position = 0;
           return (Cars)formatter.Deserialize(ms);
       }

    }


  }

4 个答案:

答案 0 :(得分:1)

当然,只需确保您完善语法以使其成为有效的C#以便编译并使用[Serializable]属性装饰您的类,否则您将无法使用BinaryFormatter对其进行序列化:

[Serializable]
public class Cars
{
    public int Model;
    public int Make;

    public Cars CreateDeepCopy()
    {
        using (var ms = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(ms, this);
            ms.Position = 0;
            return (Cars)formatter.Deserialize(ms);
        }
    }
}

答案 1 :(得分:1)

是的,使用您在示例中使用的确切语法。但请注意,这不会尊重继承,因此如果您有Cars子类CreateDeepCopy仍会输入Cars(尽管返回的对象由于BinaryFormatter的工作原理,它将是子类型。如果需要,可以通过“方法隐藏”解决这个问题,即

[Serializable] class SomeSpecialCar : Cars {
    new public SomeSpecialCar CreateDeepCopy() {
       return (SomeSpecialCar)base.CreateDeepCopy();
    }
}

另请注意,Cars似乎代表单个实例,因此应该是Car

答案 2 :(得分:0)

为什么不,你的实施有什么问题?使用块返回null,它应该是文件。您可以返回相同的实例以及新实例或默认实例。

答案 3 :(得分:0)

是的,确实如此。要克隆您的课程,您可以实施ICloneable而不是CreateDeepCopy方法。但是,它返回一个对象,要求调用者将其强制转换回Cars