繁体   English   中英

.NET MVC 模型对象的多态性

Polymorphism with .NET MVC model objects

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我从一个基本模型类派生了一堆模型。 以下是一个此类子模型的示例:

namespace MyProject.Models
{
    public abstract class Parent1 {}
}

namespace MyProject.Models
{
    public class Child1: Parent1  { ... }
}

这些模型中的每一个都具有非常一致的功能,我在称为“处理程序”的单独类中进行编码。 有一个基本处理程序,用于定义方法名称:

namespace MyProject.Models
{
    public abstract class Parent1Handler
    {
        public abstract void Update(Parent1 model);
    }
}

但是当我尝试创建派生处理程序时,.NET 对我的参数类型不满意:

namespace MyProject.Models
{
    public class Child1Handler: Parent1Handler
    {
        public override void Update(Child1 model) { ... }
    }
}

它本质上要求我使用Parent1类型的参数来覆盖我的方法。 Child1源自Parent1 ; Child1类型的参数不应该是合适的替代品吗?

1 个回复

正如评论者所指出的,这不是覆盖的工作方式。 您根本无法更改被覆盖方法的签名。 您可以将 Child1 的实例传递到覆盖的Update方法中,但不能更改签名。

为了得到你想要做的事情,你必须利用泛型

public class Parent1Handler<TChild> where TChild : Parent1
{
    public abstract void Update(TChild model);
}
public class Child1Handler: Parent1Handler<Child1>
{
    public override void Update(Child1 model) 
    {
     ....
    }
}

这允许您为每个继承的模型拥有一个单独的子Handler程序。 但是,我会检查自己并确保这确实是您想要做的事情。 模型继承可能是一个陷阱。 它可以促进代码重用,但它也可能很快导致噩梦,很难弄清楚特定的逻辑片段在哪里。 如果您打算继承模型,我强烈建议您不要深入一层以上。

1 ActiveRecord模型上的多态性

我有两个模型,例如“产品”和“捆绑销售”。 产品表与product_prices表相关,捆绑到bundle_prices(需要进行这些分离以支持多种货币) 显然,Product和Bundle都共享一些类似的方法,例如get_price 为此,我使Product和Bundle都指 ...

2 多态性,ArrayList和对象

这是一个普遍的问题。 我试图在创建一个有效的程序或至少一个工作程序时理解多态的概念。 该程序将添加,删除,搜索和显示植物。 假设我必须创造一种超级植物和三种不同的植物(花,真菌,杂草)从植物延伸。 问题:我希望能够创建工厂ArrayList或Array。 那可能吗? 或者 ...

3 模型多态性和模型-视图分离

在制作Django应用程序时遇到了种种困境,但我认为我遇到的问题通常适用于MVC模式。 我正在制作一个Question模型,该模型可用于构建测验或问卷。 Question基类将是一个简单的免费响应问题。 我想支持不同类型的问题,例如多项选择题或滑尺问题,这些将是Question基类的子类, ...

4 Django模型中的多态性

我正在开发django应用程序,我有这样的模型结构 我将animal_set传递给模板并输出像{{ animal }}这样的每个对象。 它输出Animal ,但我创建了羊类型的对象,并且想要使用羊的__unicode__方法而不是动物。 多态在Django模型中有效吗? 我找到 ...

6 不同模型具有相同的多态性

我有一个模型,它是抽象类的多态身份 我需要FlaskModel与ModelA具有相同的多态关系,因为FlaskModel具有在ModelA中不存在的烧瓶特定的约束(请求上下文,用户权限等) 但是,在创建第二个类时,SQLAlchemy会发出有关重复的警告,这是有充分的理由的,因为即 ...

7 Django模型多态性和外键

我的应用程序中有3种不同的用户。 继续进行,查找约会并预订约会的客户。 可以为客户创建约会的人,可以注册并收取约会费用 可以为客户创建约会以进行注册,收取约会费用并提供到该组织中所雇用的各个提供程序的链接的组织(即,上面第2组中的用户) 我看到类型1和2在某些方 ...

8 使用对象组合的多态性-JavaScript

多态性仅适用于JavaScript中的OOP概念吗? 我正在尝试在JavaScript中使用对象组合与原型/类继承。 如果适用该概念,那么在对象组合中多态性的实现将是什么? 这是带有多态性实现的原型继承的示例(方法覆盖,在子对象上重新实现render方法) ...

9 实例化对象 - 多态性

我有一个处理'债券'的财务申请。 我需要 对应用程序建模以避免贫血模型(我理解这很糟糕)。 根据债券的类型实例化不同的实现。 系统从外部系统获取指令,并将指令应用于指定的绑定。 因此我有一个指令实体 例如,指令的投票 “ 是 ”对债券作出决议 和债券 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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