我有几个具有不同属性的类,我想对这些类的实例做同样的事情。让我们说他们的属性保存到文本文件与另一个信息(我没有在该实例中的所有信息所以我不能使用像ToString()
方法的东西 - 我必须在另一个类中使用这些属性)。
以下是两个类的示例:
class Dog
{
public int Height { get; set; }
public string Name { get; set; }
}
class Car
{
public bool IsConvertible { get; set; }
public string VIN { get; set; }
}
在文本文件中,我希望保存实例,如:
20151023;狗; 32厘米;我的狗;
20151023;汽车;真正; WP0ZZZ99ZTS392124;
我认为使用方法public static void Write(T)
和public static T Read(string line)
为每个受支持的类设置特殊的静态类会很好。这两种方法在每个类中都有相同的名称,但功能略有不同,所以我认为Interface
或Abstract class
可以工作,但不适用于static
方法。
static
类更好吗?答案 0 :(得分:1)
我假设您正在寻找一种方法,允许您定义一些可以针对不同类实现的抽象。将对象内容保存到某个字符串只是一个例子。如果不是这种情况(即您只关心序列化),那么只需使用.NET框架中的序列化API。
我有什么方法可以确定所有类中都实现了这些静态方法吗?
单独使用C#无法做到这一点。您可以使用一些挂钩到编译过程的工具,并允许您为类设置自定义规则。在这种情况下,我不建议您这样做。
使用" classic"更好吗?在这种情况下,类而不是静态的?
是。我建议你创建一个通用接口。
我将使用您提供的相同示例(保存内容或序列化):
public interface ISerializer<T>
{
string Read(T obj);
void Write(T obj, string data);
}
然后您可以为对象创建序列化程序。以下是Dog
对象的示例:
public class DogSerializer : ISerializer<Dog>
{
public void Write(Dog obj, string data)
{
//Parse the data string and set properties on the object
}
public string Read(Dog obj)
{
//Create a string by reading properties from the dog object
}
}
您还可以创建一个通用序列化程序,使用Reflection从/向任何对象读取/写入属性。
public class Serializer<T> : ISerializer<T>
{
public string Read(T obj)
{
//Use reflection here to read object properties
}
public void Write(T obj, string data)
{
//Use reflection here to set object properties
}
}