繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM