[英]C# abstract method in abstract class with children that return different types
我了解此处发布的解决方案,而无需强制转换,java中抽象方法的不同返回类型
但是,我不认为我可以使用泛型,因为其他一些类包含“ Content”,因此我不想决定在编译时使用的是哪种Content。
public abstract class Content {
public abstract Content getContent();
}
public class UrlContent : Content {
public String s;
public getContent(){ return s;}
}
public class ImageContent : Content {
public Byte[] image;
public getContent(){ return image;}
}
您可以使用generics完成此操作,并且仍然维护一个非generic接口,您可以在不需要知道返回类型的任何地方引用它,例如:
public interface IContent {
object GetContent();
}
public abstract class Content<T> : IContent {
public abstract T GetContent();
object IContent.GetContent()
{
return this.GetContent(); // Calls the generic GetContent method.
}
}
public class UrlContent : Content<String> {
public String s;
public override String GetContent() { return s; }
}
public class ImageContent : Content<Byte[]> {
public Byte[] image;
public override Byte[] GetContent(){ return image; }
}
假设以后的实现是public override Content getContent()
方法...
您已将函数声明为返回Content对象,然后尝试从中返回String或Byte []。 这行不通。 如果您希望能够返回任意数量的类型,最简单的方法是返回Object
而不是Content
,这对于byte []或string都可以正常工作。 它也作为对调用代码的警告,表明数据类型可能几乎是任何东西。
您也可以使用该链接中引用的泛型,并且将不返回特定类型的类定义为public class StrangeContent : Content<object>
以便它们可以返回多种数据类型,而不必强制所有实现松散类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.