0

有什么方法可以根据用户想要创建的数量来创建多个类对象?我能够做到这一点,但是该实例仅在创建它的方法下可用

    public void Create()
    {
        //create class objects here
    }

现在我将无法在另一种方法中使用它,例如

    public void Use()
    {  
        //can't use class objects
    }
4

4 回答 4

1

无需停下来询问您的设计决策,这里有一个直接的答案来演示使用字段的简单技术:

public class MyMainClass {
    private List<MyOtherClass> _instances = new List<MyOtherClass>();

    private void Create(int number) {
        for (int i = 0; i < number; i++) {
            this._instances.Add(new MyOtherClass());
        }
    }

    private void Use() {
        // use the first instance I created
        MyOtherClass other = this._instances[0];

        other.DoSomething();
    }
    ...
}

_instances 字段的范围是 MyMainClass。这意味着它可用于其所属类的所有实例方法(非静态)。

至于你为什么要这样做,我会留给别人。

更新:Hemant 在另一个答案中演示了另一种技术,其中 Create 方法将实例返回给调用者。然而,我决定坚持使用字段来展示更基本的技术。

于 2010-10-02T10:52:02.230 回答
1

尝试这个:

public MyObject[] Create()
{
    //create class objects here and return them
    return new[] {new MyObject(), new MyObject()};
}

//later
public void Use()
{  
    MyObject[] objs = Create();
    //use your objects as you like
}
于 2010-10-02T10:52:50.823 回答
0

我认为您的意思是特定类的实例对象。有关类和实例的介绍,请参见此处。

但本质上:

public class SomeClass{
   int someData;
   void SetData(int data) {
     someData = data;
   }
   int GetData() {
      return data;
   }
}

// 创建一些“SomeClass”的实例

var instance1 = new SomeClass(); var instance2 = new SomeClass();

instance1.SetData(2); istance2.SetData(3);

于 2010-10-02T10:53:23.397 回答
0

Create()您正在创建一个课程,但正如您所说,无法在课程之外使用它。您需要做的第一件事是更改它以返回对象:

public SomeType Create()
{
  //code that creates the object here.
  //Lets say it gets put into a variable called ret
  return ret;
}
public void Use()
{
  SomeType st = Create();
  //use st here.
}

Create或者,创建对象的方法可以将其作为参数传递给,而不是使用对象调用的方法Use(SomeType st)

要对多个对象执行此操作,那么我们需要返回的不是 SomeType,而是包含这些多个 SomeType 对象的对象。有时我们需要关于整个集合的某些属性和方法(例如计数、在集合中前后移动的能力等等)。在这种情况下,我们将返回一个数组、a List<SomeType>、aHashSet<SomeType>或类似的东西Dictionary<string, SomeType>

如果我们不需要对整个集合进行这样的操作,那么返回一个对象会更简单、更有效,IEnumerable<SomeType>它是一个允许人们处理一系列此类对象但仅此而已的对象。C# 有一个语法正好可以做到这一点。假设我们要返回 10 个这样的对象:

public IEnumerable<SomeType> Create()
{
  for(int i = 0; i != 10; ++i)
  {
    //code that creates the object here.
    //Lets say it gets put into a variable called ret
    yield return ret;
  }
}
public void Use()
{
  foreach(SomeType st in Create())
  {
    //use st here.
  }
}

yield关键字很好地隐藏了很多复杂性,IEnumerable<SomeType>让您只需编写传递每个新对象的代码(这种复杂性仍然存在于生成的代码中,但您不必担心问题)。

于 2010-10-02T11:00:17.113 回答