gpt4 book ai didi

c# - 如何使类工厂创建所需的派生类

转载 作者:太空狗 更新时间:2023-10-30 01:06:35 25 4
gpt4 key购买 nike

我经常使用类工厂模式,其中一个类有一个私有(private)构造函数和一个静态方法来创建类。这允许由于某种原因无法构造类并返回 null 的情况 - 非常方便。

我希望能够将它扩展到一个工厂方法,该方法根据条件从派生类的层次结构中创建一个特定的类。但是我看不到隐藏派生类的构造函数以强制使用工厂方法的方法。如果工厂方法在基类中,它就不能再访问派生类的私有(private)构造函数。将工厂方法放在每个派生类中是行不通的,因为必须事先知道所需的类型。如果一个类可以访问嵌套类的私有(private)成员,则嵌套类可能是一种方式,但遗憾的是,嵌套类似乎可以访问封闭类的私有(private)成员,但反过来却不行。

有人知道这样做的方法吗?

最佳答案

有几种可能性,其中两种是:

  1. 将所有这些类放在一个项目中,并将构造函数设为内部。其他项目将无法调用这些构造函数,但该项目中的代码可以。
  2. 使这些类的构造函数protected(而不是private)并在包含工厂方法的类中创建一个私有(private)派生类。创建该私有(private)类的实例并将其返回。

第二个选项的示例:

public static class AnimalFactory
{
public static Animal Create(int parameter)
{
switch(parameter)
{
case 0:
return new DogProxy();
case 1:
return new CatProxy();
default:
throw new ArgumentOutOfRangeException("parameter");
}
}

private class DogProxy : Dog { }

private class CatProxy : Cat { }
}

public abstract class Animal { }

public class Dog : Animal
{
protected Dog() { }
}

public class Cat : Animal
{
protected Cat() { }
}

关于c# - 如何使类工厂创建所需的派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14977231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com