有沒有什麼辦法可以根據用戶創建多少來創建多個類對象?我能做到這一點,但隨後該實例創建它如何使一種方法創建的類的實例可用於另一個對等方法?
public void Create()
{
//create class objects here
}
下方法只可現在我將無法使用它的另一種方法,例如
public void Use()
{
//can't use class objects
}
有沒有什麼辦法可以根據用戶創建多少來創建多個類對象?我能做到這一點,但隨後該實例創建它如何使一種方法創建的類的實例可用於另一個對等方法?
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
}
我想你指的是特定類的實例對象。請參閱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);
在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>
並讓您只寫流出每個新對象的代碼(即複雜性仍然是存在的生成的代碼,但不是你擔心的問題)。
你將需要擴大這一點 - 因爲我看不出什麼問題。如果他們需要通過類中的其他方法看到,那麼它的類級變量即私有屬性。如果他們需要被其他類所看到,那麼它就是一個更復雜的問題,但歸結爲需要一個全局變量(一個靜態類或一個類的靜態屬性) – Murph 2010-10-02 10:57:47