日期:2014-05-18  浏览次数:20695 次

JAVA用继承的时候,子类的方法返回类型改变,还是可以实现多态。那么在C#该如何做?
JAVA中父类的方法,编译器认同为C#中的虚方法,我是这样理解的。

C#中需要virtual关键字让子类重写父类的方法。

但是,JAVA中有父类子类方法返回类型不同的情况,却仍体现出多态

而C#要求必须返回类型一致

代码如下:
C# code

    public class Processor
    {
        public string name()
        {
            return this.GetType().Name;
        }
        public Object process(Object input)
        {
            return input;
        }
    }
    public class Upcase:Processor
    {
        public  string process(Object input)
        { // Covariant return
            return ((string)input).ToUpper();
        }

    }
    public class Downcase:Processor
    {
        public  string process(Object input)
        {
            return ((string)input).ToLower();
        }
    }
    public class Splitter : Processor
    {
        public  string process(Object input)
        {
            // The split() argument divides a String into pieces:
            string[] arrStr = ((string)input).Split(' ');
            string str = "";
            for (int i = 0; i < arrStr.Length; i++)
                str = str + arrStr[i];
            return str;
        }
    }
    public class Apply
    {
        public static void process(Processor p, Object s)
        {
            Console.WriteLine("Using Processor " + p.name());
            Console.WriteLine(p.process(s));
        }
        public static string s =
            "Disagreement with beliefs is by definition incorrect";
        public static void Main(string[] args)
        {
            process(new Upcase(), s);
            process(new Downcase(), s);
            process(new Splitter(), s);
        }
    }


  这程序的本意是,输出大写 小写 去掉空格的字符串
如何用C#去实现呢?



------解决方案--------------------
比如你可以这样:
C# code
class ProcessorBase<T>
{
    public virtual T DoProcess() { }
}
class StringProcessor : ProcessorBase<string>
{
    public override string DoProcess() { }
}