Iai*_*ser 1 c# casting class extend
再次免责声明仍然在学习C#和OOP一般,所以我希望你能耐心陪我:)
我目前正在使用一个CMS,它有一个叫做类的类FileVersion
,它基本上包含一个与文件有关的属性列表,如文件名,文件类型,字节大小,id,上传日期,is-latest-version等.
FileVersion
s 的列表包含在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)
现在我应该注意,似乎我不需要在这里实现一个接口 - 但是不要把它作为福音,这就是为什么我在这里.
但是,当我试图像我这样投下我FileVersion
的DocumentVersion
时候:
DocumentVersion dv = ((DocumentVersion)fileversion);
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
无法将"Foo.CMS.FileVersion"类型的对象强制转换为"CoA.DocumentVersion".
我的想法是因为我试图在一个不同的命名空间中扩展一个类,而不是原来所在的,但就像我说的那样,OOP对我来说相对较新,所以我可能错了.
在此先感谢您的帮助.这个社区非常有价值!我只希望一旦我更熟练,我可以回馈:).
你想要垂头丧气吗?即采取现有的,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)
有关构图的更多信息,请参见此处.
归档时间: |
|
查看次数: |
3504 次 |
最近记录: |