有没有办法根据用户想要创建多少个类对象?我能够做到这一点,但那个实例只能在创建它的方法下使用
public void Create()
{
//create class objects here
}
现在我无法在另一种方法中使用它,例如
public void Use()
{
//can't use class objects
}
答案 0 :(得分: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方法将实例返回给调用者。然而,我决定坚持使用领域来展示更基本的技术。
答案 1 :(得分: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
}
答案 2 :(得分:0)
我认为你的意思是特定类的实例对象。请参阅here for an introduction to classes and instances。
但实质上是:
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); isntance2.SetData(3);
答案 3 :(得分: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对象的对象。有时我们需要关于整个集合的某些属性和方法(例如,计数,在集合中前后移动的能力等)。在这种情况下,我们会根据需要返回一个数组,List<SomeType>
,HashSet<SomeType>
或类似Dictionary<string, SomeType>
。
如果我们不需要对整个集合进行此类操作,那么返回IEnumerable<SomeType>
更简单,更有效,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.
}
}
是一个允许人们通过一系列此类对象但不多的对象其他。 C#的语法正是为了做到这一点。假设我们要返回10个这样的对象:
yield
IEnumerable<SomeType>
关键字很好地隐藏了{{1}}的很多复杂性,让您只需编写传递每个新对象的代码(复杂性仍然存在于生成的代码中,但不是您的问题)担心)。