首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

JAVA用继承的时候,子类的方法返回类型改变,还是可以实现多态。那么在C#该怎么做

2012-04-20 
JAVA用继承的时候,子类的方法返回类型改变,还是可以实现多态。那么在C#该如何做?JAVA中父类的方法,编译器认

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() { }} 

热点排行