JAVA用继承的时候,子类的方法返回类型改变,还是可以实现多态。那么在C#该怎么做
JAVA用继承的时候,子类的方法返回类型改变,还是可以实现多态。那么在C#该如何做?
JAVA中父类的方法,编译器认同为C#中的虚方法,我是这样理解的。
C#中需要virtual关键字让子类重写父类的方法。
但是,JAVA中有父类子类方法返回类型不同的情况,却仍体现出多态
而C#要求必须返回类型一致
代码如下:
这程序的本意是,输出大写 小写 去掉空格的字符串
如何用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() { } }