C#专门化一个类的实例

时间:2012-08-23 08:05:03

标签: c# inheritance

我有一个问题,我一直在谷歌搜索但无法找到答案。

假设您有一个名为Account的类,它继承自一个名为AccountInquiry的类。

如果您有AccountInquiry的实例,是否可以将其转换为Account实例而无需有效复制。如果不是,最好的方法是什么。

基本上有一些背景知识,当有人在我们的网站上填写基本的姓名/电子邮件表格时,会创建一个帐户查询,一旦他们完成了这个,他们将获得第二个表格。如果第二个表格填写,则帐户查询将转换为帐户。

非常感谢

萨姆

4 个答案:

答案 0 :(得分:4)

它听起来不像是Account AccountInquiry。这听起来更像是两个完全独立的类,即使它们具有一些相同的属性。

在使用继承之前要小心 - 考虑它是否真的

在这种情况下,您的AccountInquiry听起来像是真实Account的有效搜索条件 - 所以您应该有一些能够执行查询的服务类,使用类似的方法:

List<Account> FindAccounts(AccountInquiry inquiry)

如果只匹配一个帐户,则可能只是Account的返回类型。这里没有“转换” - 您只是使用一个对象的属性来查找另一个对象。

(我怀疑它应该是查询而不是查询顺便说一句,但那是暂时的。)

答案 1 :(得分:0)

如果原始班级(帐户)是来自AccountInquiry的向下投射,您只能进行投射,所以,不,这是不可能的。

复制是唯一的选择。

答案 2 :(得分:0)

  

是否可以将其转换为帐户实例而无需有效复制

在这种情况下,没有。 Account可以归结为AccountInquiry,但反之亦然。您可以使用AutoMapper之类的工具,以便更轻松地映射字段。

作为替代方法,您可以做的是使Account成为AccountInquiry的属性,这将完全消除问题。

答案 3 :(得分:0)

你不能,但是¿这个怎么样?

Account account = new Account();

account.CustomerID = 25;

account.MaxAmount = (decimal)5000.00;

然后

((AccountInquiry)account).Method = "ListChanges";
((AccountInquiry)account).StartDate = DateTime.Today.AddDays(-10);
((AccountInquiry)account).EndDate = DateTime.Today;

然后,如果你需要传递给他的参数应该是Type的任何方法,你可以。