我正在将一些Java代码翻译成C#。 Java代码看起来像
public abstract class myClass implements Cloneable, Serializable {
//fields, constructors etc here.
//...
//...
public abstract Object clone(); //an implementation of this is eventually provided
in a subclass
//...
//...
}
实现了Cloneable接口的clone(),并且Serializable没有方法,所以不需要从那里实现任何东西。
在C#中,我的课程看起来像这样:
public class myClass : ISerializable, ICloneable{
//fields, constructors etc here.
//...
//...
public abstract Object Clone ();
//...
//...
}
正如您所看到的,ICloneable的方法已经实现,但在C#中,与Java的Serializable不同,ISerializable接口有一个方法,所以我需要实现它。问题是我不确定如何,因为我正在从Java翻译这个代码,而且这不需要在那里完成。
有人可以告诉我如何在C#中执行此操作吗?
我知道缺少的方法是GetObjectData,但我不知道如何实现它,传递给它的内容,或者内部应该包含的内容,因为在Java等价物中完全没有...
答案 0 :(得分:3)
在Java中,声明一个类“实现Serializable”将该类标记为“Serializable”。 Java接口是标记。
在C#中,您可以通过使用.Net“Serializable”属性标记类来完成等效项:
实施例
// A test object that needs to be serialized.
[Serializable()]
public class TestSimpleObject {
public int member1;
public string member2;
public string member3;
public double member4;
// A field that is not serialized.
[NonSerialized()] public string member5;
public TestSimpleObject() {
member1 = 11;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
}
另见:
答案 1 :(得分:2)
我假设您已经使用Java中的Serializable
接口来通知您的类可以被序列化。在.Net中,您应该使用[Serializable]
属性,ISerializable
接口具有不同的含义。
所以在.Net中你的代码应该是这样的:
[Serializable]
public class myClass : ICloneable
{
//fields, constructors etc here.
//...
//...
public abstract Object Clone ();
//...
//...
}