首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更改此代码以返回多个不同的项

如何更改此代码以返回多个不同的项
EN

Stack Overflow用户
提问于 2013-11-23 00:04:44
回答 3查看 106关注 0票数 1

这是一个工厂的例子;http://www.dotnetperls.com/factory返回1个东西。我如何改变它来返回像这样的东西;

代码语言:javascript
运行
复制
string device = "";
string deviceTypeID = "";
int deviceTypeCode = 0;
bool true

举个例子,在每个具体的类中,我会让它看起来像这样;

代码语言:javascript
运行
复制
string device = "bracelet";
string deviceTypeID = "male";
int deviceTypeCode = 0;
bool true

或者,对于另一个具体的类;

代码语言:javascript
运行
复制
string device = "ring";
string deviceTypeID = "female";
int deviceTypeCode = 8;
bool false

我认为我需要在每个具体的类中创建一个对象,但由于我对C#非常陌生,这扩展了我的理解。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2013-11-23 00:12:57

class中将它们组合在一起

代码语言:javascript
运行
复制
sealed class MyClass 
{
    public MyClass(string device, string deviceTypeId, int deviceTypeCode, bool someBool)
    {
        this.Device = device;
        this.DeviceTypeId = deviceTypeId;
        this.DeviceTypeCode = deviceTypeCode;
        this.SomeBool = someBool
    }

    string Device { get; private set; }
    string DeviceTypeId { get; private set; }
    int DeviceTypeCode { get; private set; }
    bool SomeBool { get; private set; }
}

然后在你的factory中返回它。

代码语言:javascript
运行
复制
return new MyClass("bracelet", "male", 0, false);

你的类的实现可能会有所不同,我在这里实现了它,以便你只能从它读取(在创建之后不能改变它)。

票数 2
EN

Stack Overflow用户

发布于 2013-11-23 00:16:02

定义一个新的类(如果你要创建很多这样的类,就定义一个结构):

代码语言:javascript
运行
复制
public class Container
{
  public string Device;
  public string DeviceTypeID;
  public int DeviceTypeCode;
  public bool MyBool;
}

然后让你的工厂创建这个类并返回它:

return new Container { Device = "bracelet", DeviceTypeID = "male" };

票数 2
EN

Stack Overflow用户

发布于 2013-11-23 00:36:37

我想在Adam Kewley的伟大答案上补充一些东西。如果您的工厂要创建和返回许多项,那么设置一个静态字典并通过它们的键来引用它们可能会很有用。在现实世界中,您可能会将“设备”存储在数据库中并由程序缓存,但这可能是探索实现工厂模式的细节的有用方法。

代码语言:javascript
运行
复制
    class ItemFactory
    {
        private static readonly Dictionary<string, MyClass> knownItems = new Dictionary<string, MyClass>
        {
            {"bracelet", new MyClass("bracelet", "male", 0, true)},
            {"ring", new MyClass("ring","female",8,false)}
        };

        public MyClass createItemByType(string itemType)
        {
            if (knownItems.ContainsKey(itemType))
                return (knownItems[itemType]); 
            // default behavior if an item isn't found.
            // maybe throw an exception here, depending on your needs. 
            return new MyClass(); // unknown item
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20149292

复制
相关文章

相似问题

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