2010-10-02 60 views
0

有没有什么办法可以根据用户创建多少来创建多个类对象?我能做到这一点,但随后该实例创建它如何使一种方法创建的类的实例可用于另一个对等方法?

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

下方法只可现在我将无法使用它的另一种方法,例如

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

你将需要扩大这一点 - 因为我看不出什么问题。如果他们需要通过类中的其他方法看到,那么它的类级变量即私有属性。如果他们需要被其他类所看到,那么它就是一个更复杂的问题,但归结为需要一个全局变量(一个静态类或一个类的静态属性) – Murph 2010-10-02 10:57:47

回答

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

试试这个:

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 
} 
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的'

变种INSTANCE1的一些实例中=新SomeClass的(); var instance2 = new SomeClass();

instance1.SetData(2); isntance2.SetData(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>是一个对象,它允许我们通过一系列这样的对象而不是其他许多对象。 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>并让您只写流出每个新对象的代码(即复杂性仍然是存在的生成的代码,但不是你担心的问题)。

相关问题