具有返回不同类型的子项的抽象类中的 C# 抽象方法

标签 c# inheritance abstract-class abstraction abstract-methods

我了解此处发布的解决方案 Different return types of abstract method in java without casting

但是,我不认为我可以使用泛型,因为一些其他类包含“内容”,我不想在编译时决定它使用哪种类型的内容。

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 完成此操作,并且仍然维护一个非通用接口(interface),您可以在任何不需要知道返回类型的地方引用它,例如:

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; }
}

关于具有返回不同类型的子项的抽象类中的 C# 抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22137624/

相关文章:

c# - 如何在使用 XAML 获取图像资源后释放/缓存图像资源

matlab - 如何取消父类(super class)对默认 Matlab 函数的覆盖

java - 通过抽象来强制执行 hashCode 和 equals 是否有任何优势?

c# - XNA - 分辨率独立的基于图 block 的游戏

c# - Web.Config 中的自定义部分/集合

c# - C#中如何防止非法ICloneable<T>继承?

java - 当没有实现时,抽象方法如何工作?

PHP - 如果抽象类中的所有方法都是抽象的,那么接口(interface)和抽象类之间有什么区别

c# - 无法从动态生成的文件上传控件中保存文件

Javascript原型(prototype)继承基函数未定义