具有相同静态函数且具有不同功能的更多类

时间:2015-10-23 21:19:31

标签: c# generics static

我有几个具有不同属性的类,我想对这些类的实例做同样的事情。让我们说他们的属性保存到文本文件与另一个信息(我没有在该实例中的所有信息所以我不能使用像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)为每个受支持的类设置特殊的静态类会很好。这两种方法在每个类中都有相同的名称,但功能略有不同,所以我认为InterfaceAbstract class可以工作,但不适用于static方法。

  1. 我有什么方法可以确定这些静态方法是否在所有类中实现?
  2. 在这种情况下,使用“经典”类而不是static类更好吗?

1 个答案:

答案 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
    }
}