类的通用逻辑的最佳实践

时间:2015-04-24 07:28:57

标签: c# serialization

我有一个很大的班级,大约有4000多行,我认为这可能是另一种方法。

它是一个序列化消息的类,嵌套类总是具有相同的结构并覆盖ToString和Equal方法。有一些简单的类,如下所示,复杂的类在属性中实现这些简单类。

我的想法类似于扩展类,它实现了覆盖并用它扩展了简单类

示例类

[Serializable]
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false)]
public class ID
{
    #region Public Properties

    [XmlAttribute("ID")]
    public String Value { get; set; }

    #endregion

    #region Public Methods and Operators

    public static bool operator == (ID left, ID right)
    {
        return Equals(left, right);
    }

    public static bool operator != (ID left, ID right)
    {
        return !Equals(left, right);
    }

    public override bool Equals (object obj)
    {
        if (ReferenceEquals(null, obj))
        {
            return false;
        }
        if (ReferenceEquals(this, obj))
        {
            return true;
        }
        if (obj.GetType() != this.GetType())
        {
            return false;
        }
        return Equals((ID) obj);
    }

    public override int GetHashCode ()
    {
        return (Value != null
                    ? Value.GetHashCode()
                    : 0);
    }

    public override String ToString ()
    {
        return Value;
    }

    #endregion

    #region Methods

    protected bool Equals (ID other)
    {
        return string.Equals(Value, other.Value);
    }

    #endregion
}

我的想法

public class FieldExtension
{
    public String Value { get; set; }

    #region Public Methods and Operators

    public static bool operator == (FieldExtension left, FieldExtension right)
    {
        return Equals(left, right);
    }

    public static bool operator != (FieldExtension left, FieldExtension right)
    {
        return !Equals(left, right);
    }

    public override bool Equals (object obj)
    {
        if (ReferenceEquals(null, obj))
        {
            return false;
        }
        if (ReferenceEquals(this, obj))
        {
            return true;
        }
        if (obj.GetType() != this.GetType())
        {
            return false;
        }
        return Equals((ID) obj);
    }

    public override int GetHashCode ()
    {
        return (Value != null
                    ? Value.GetHashCode()
                    : 0);
    }

    public override String ToString ()
    {
        return Value;
    }

    #endregion

    #region Methods

    protected bool Equals (ID other)
    {
        return string.Equals(Value, other.Value);
    }

    #endregion
}

public class ID: FieldExtension
{
    #region Public Properties

    [XmlAttribute("ID")]
    public String Value { get; set; }

    #endregion
}

我不知道这是否可行而且我只是问一些人之前是否做过这样或类似的事情,如果工作会为我节省很多工作

提前致谢

EDIT 示例复杂类

    [Serializable]
    [XmlType(AnonymousType = true)]
    [XmlRoot(Namespace = "", IsNullable = false)]
    public class Zählpunkt
    {
        #region Public Properties
        [XmlElement("ID")]
        public ID ID { get; set; }
        [XmlAttribute("Zählpunkt")]
        public String Value { get; set; }
        #endregion
..

1 个答案:

答案 0 :(得分:1)

您将使基类FieldExtension成为抽象,并将Value属性抽象为:

public abstract class FieldExtension
{
    public abstract String Value { get; set; }
    ...

然后在ID类中覆盖属性:

override public String Value { get; set; }

这使得基类中的代码使用您在继承它的类中实现的值。