如何避免代码重复?

Ron*_*nin 0 .net c# code-duplication

Output()在两个类Hour和方法中都有相同的代码Day.有没有办法避免它在一个地方而不是两个地方改变代码?

class Program
{
    static void Main(string[] args)
    {
        Hour hour = new Hour("20150715 080000");
        Day day = new Day(hour);

        Console.WriteLine(String.Format("Hour: {0}", hour.Output()));
        Console.WriteLine(String.Format("Day: {0}", day.Output()));
    }
}

public interface IMoment
{
    string OutputMoment();
}

class Hour : IMoment
{
    public string Date;
    public string Time;

    public Hour (string s)
    {
        string[] parts = s.Split(';');
        this.Date = parts[0];
        this.Time = parts[1];
    }

    public string Output()
    {
        return Date + " " + Time;
    }
}

class Day : IMoment
{
    public string Date;
    public string Time;

    public Day(Hour hour)
    {
        this.Date = hour.Date;
        this.Time = hour.Time;
    }

    public string Output()
    {
        return Date + " " + Time;
    }

}
Run Code Online (Sandbox Code Playgroud)

usr*_*usr 6

不要错误地创建基类来共享该方法.这是继承的常见滥用.这种技术一般会中断,你会在类的公共接口中引入一个无意义的类.继承不适用于代码共享.这是"Liskov替代".

相反,创建一个静态帮助器方法,它将两个值作为参数并计算结果.这允许您实现一次格式化.这很容易实现,几乎总是有效,并且不会影响类的公共API.不要害怕稍大的语法占用空间.这不是一个重大问题(大多数时候).