初学者:用C#扩展一个类,我做错了吗?

Iai*_*ser 1 c# casting class extend

再次免责声明仍然在学习C#和OOP一般,所以我希望你能耐心陪我:)

我目前正在使用一个CMS,它有一个叫做类的类FileVersion,它基本上包含一个与文件有关的属性列表,如文件名,文件类型,字节大小,id,上传日期,is-latest-version等.

FileVersions 的列表包含在File其中具有自己的唯一ID的列表中.如果要从CMS下载特定文件,则使用以下内容构建URL:

string URL = "/files/"+file.id.toString()+"/"+file.fileVersion.Last().filename;
Run Code Online (Sandbox Code Playgroud)

现在,对于我正在处理的特定控件(专门处理文档文件),能够将URL与所有其他FileVersion信息一起存储以供以后使用是有意义的.所以我决定创建自己的类DocumentVersion,其中包含扩展FileVersion.这就是它的样子:

public partial class DocumentVersion : FileVersion
{
    public DocumentVersion() : base() { }
    public string link;
}
Run Code Online (Sandbox Code Playgroud)

现在我应该注意,似乎我不需要在这里实现一个接口 - 但是不要把它作为福音,这就是为什么我在这里.

但是,当我试图像我这样投下我FileVersionDocumentVersion时候:

DocumentVersion dv = ((DocumentVersion)fileversion);
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

无法将"Foo.CMS.FileVersion"类型的对象强制转换为"CoA.DocumentVersion".

我的想法是因为我试图在一个不同的命名空间中扩展一个类,而不是原来所在的,但就像我说的那样,OOP对我来说相对较新,所以我可能错了.

在此先感谢您的帮助.这个社区非常有价值!我只希望一旦我更熟练,我可以回馈:).

Bri*_*new 5

你想要垂头丧气吗?即采取现有的,FileVersion并声明它是一个DocumentVersion

如果是这样,你不能这样做,因为你所拥有的只不过是一个FileVersion.

相反,您需要创建一个 DocumentVersion对象.你的DocumentVersion构造函数将获取a所需的参数FileVersion,然后FileVersion通过调用构造函数base().

请注意,如果您有一个现有FileVersion对象,您可能希望一个对象包装它,而不是从中派生一个对象.例如,您DocumentVersion不会派生自FileVersion,但包含对a的私人引用FileVersion,以及所需的其他数据.在这种情况下,这可能更合适.

例如(以OO术语表示这是作文)

public class DocumentVersion {
   private FileVersion fv;
   private String url;
   public DocumentVersion(FileVersion fv, String url) {
      this.fv = fv;
      this.url = url;
   }
}
Run Code Online (Sandbox Code Playgroud)

有关构图的更多信息,请参见此处.