あなたはクラスを作成していますが、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>
新しいオブジェクトを渡すコードを書くだけで済みます (その複雑さは生成されたコードにまだ存在しますが、心配する必要はありません)。