C# 使用枚举和继承的工厂设计模式

C# 使用枚举和继承的工厂设计模式,c#,inheritance,enums,factory,C#,Inheritance,Enums,Factory,我有一个概念上的问题。我想使用设计模式工厂,使用枚举来知道要创建什么类型的对象。但当涉及到在另一个程序集中继承时,我会坚持使用枚举 让我来解释一个案例: 我正在为管理成果的多个项目创建一个框架 我创建了一个由抽象类Fruit实现的接口IFruit,它将从中继承草莓、苹果和梨 我创建了一个枚举水果类型,其中包含草莓、苹果和梨 我使用虚拟方法创建水果工厂: GiveMeANewFruit(水果类型newFruit)返回一个IFruit 一切都好 我把我的框架发送到世界各地,我们西班牙工厂的人也需要管

我有一个概念上的问题。我想使用设计模式工厂,使用枚举来知道要创建什么类型的对象。但当涉及到在另一个程序集中继承时,我会坚持使用枚举

让我来解释一个案例:

我正在为管理成果的多个项目创建一个框架

我创建了一个由抽象类
Fruit
实现的接口
IFruit
,它将从中继承
草莓
苹果

我创建了一个枚举
水果类型
,其中包含
草莓
苹果

我使用虚拟方法创建
水果工厂
GiveMeANewFruit(水果类型newFruit)
返回一个
IFruit

一切都好

我把我的框架发送到世界各地,我们西班牙工厂的人也需要管理

他将创建继承水果的
Banana

他将创建一个
SpanishFruitFactory
,它将继承
FruitFactory
,并重新定义虚拟方法
GiveMeANewFruit
,下面是该方法中可能包含的代码:

Public Override IFruit GiveMeANewFruit(FruitTypes newFruit)
{
    if (newFruit == FruitTypes.Banana)
        return new Banana();
    else
        return base.GiveMeANewFruit(newFruit);
}
但是,问题来了。我知道像C#这样的语言不允许继承枚举。因此,我的人不能将
香蕉
值添加到
水果类型
枚举中

那么,替换枚举的最佳模式是什么,这样我就可以向外部世界提供向我的概念中添加新对象类型的能力

知道我不希望有任何源代码之外的内容(没有XML文件、数据库或任何其他提供类型列表的内容)


你有什么建议吗?

我认为最好的替代品是
静态类。我在
php
中就是这样做的。
使用字段定义
静态类
,而不是
枚举
,如果愿意,您甚至可以将字段定义为
字符串

更改工厂方法以接受
int
,并使用以下类实现枚举:-

public class FruitTypes
{
    public const int Strawberry = 1;
    public const int Apple = 2;
    public const int Pear = 3;
}

public class SpanishFruitTypes : FruitTypes
{
    public const int Banana = 4;
}
用法示例:-

factory.GiveMeANewFruit(FruitTypes.Pear)

factory.GiveMeANewFruit(SpanishFruitTypes.Banana)

这不是java,而是使用MEF。下面是对MEF的一个介绍:@clcto简单地说“使用MEF”,但绝对没有说明您所指的内容或其相关性,这并没有什么帮助。我真的不知道珠峰基金会与这个有什么关系。你看过这个吗?-或者-这些可以做吗??西拉米克我会用John Bustos评论中的第二个链接。