首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造函数可以返回SubClass吗?

问构造函数可以返回SubClass吗?
EN

Stack Overflow用户
提问于 2010-03-01 03:11:10
回答 4查看 2.2K关注 0票数 9

给定以下客户端代码:

代码语言:javascript
复制
var obj = new Class1();

有没有办法修改Class1的构造函数,使其实际上返回一个子类(或其他一些替代实现)?

我希望obj在两种不同的实现中选择一种,这取决于某些条件。显然,我可以改用工厂或DI框架,但如果可能的话,我希望避免更改客户端代码。

我假设答案是否定的,但我想知道是否有一些聪明的方法来实现这一点。

EN

回答 4

Stack Overflow用户

发布于 2010-03-01 03:18:39

您可以将构造函数替换为工厂方法,并根据参数返回您喜欢的任何内容:

代码语言:javascript
复制
public Class2 : Class1 {}

public static Class1 CreateClass1(bool returnDerivedClass)
{
    if (returnDerivedClass)
    {
        return new Class2();
    }
    else
    {
        return new Class1();
    }
}
票数 9
EN

Stack Overflow用户

发布于 2010-03-01 03:12:06

这是不可能的。

巧妙的解决方法包括用static函数替换构造函数,或者(不推荐)在基类周围使用包装器,以及创建不同的包装类。

票数 4
EN

Stack Overflow用户

发布于 2010-03-01 03:33:29

对于这样的事情,您需要查看工厂模式。此外,根据您的需要,我建议您查看减少耦合的一般方法。您对类的构造函数的调用是您在程序中所能拥有的最难的耦合,并且使诸如交换实现之类的事情变得麻烦,正如您自己所发现的那样。

阅读“控制反转”和“依赖注入”,也许这才是你真正想要的。

可以在here中找到一个很好的库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2352259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档