有什么方法可以根据用户想要创建的数量来创建多个类对象?我能够做到这一点,但是该实例仅在创建它的方法下可用
public void Create()
{
//create class objects here
}
现在我将无法在另一种方法中使用它,例如
public void Use()
{
//can't use class objects
}
无需停下来询问您的设计决策,这里有一个直接的答案来演示使用字段的简单技术:
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 方法将实例返回给调用者。然而,我决定坚持使用字段来展示更基本的技术。
尝试这个:
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
}
我认为您的意思是特定类的实例对象。有关类和实例的介绍,请参见此处。
但本质上:
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);
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>
让您只需编写传递每个新对象的代码(这种复杂性仍然存在于生成的代码中,但您不必担心问题)。