2013-04-05 88 views
0

當Java創建對象,我用的語法如下:雖然找過C#中的項目我碰到下面的代碼來有人可以在C#中解釋這種語法嗎?

objectX1 = new ObjectX(some arguments); 

_createSample = new Func<SampleBase>[] 
{ 
    () => new SkeletonMappingSample(); 
} 

我需要兩兩件事來解釋我。 首先,如何創建一個沒有方括號和參數列表的對象,而是使用{}和表達式工作?

接下來,{}之間的表達意味着什麼?

+0

集合初始化語法(或等效反正)存在於Java的太... – Servy 2013-04-05 13:47:48

回答

3

您找到的代碼︰

_createSample = new Func<SampleBase>[] 
{ 
    () => new SkeletonMappingSample(); 
} 

只是一個創建數組,然後用值初始化它的符號。

這實際上是一樣的:

_createSample = new Func<SampleBase>[1]; 
_createSample[0] =() => new SkeletonMappingSample(); 

除了在{ }版本的界限是由編譯器根據你有多少元素{ }

之間增加爲對象設置:

SomeClass abc = new SomeClass() 
{ 
    SomeProperty = "SomeValue", 
} 

只是一種創建對象然後設置一些屬性值的方法,它實際上與以下相同:

SomeClass abc = new SomeClass(); 
abc.SomeProperty = "SomeValue"; 
1

此代碼創建的Func數組:_createSample = new Func<SampleBase>[]

然後它實例化一個lambda expression() => new SkeletonMappingSample()如在它的鞋底元件,使用collection initializer(注意括號和分號是可選的):

{ 
    () => new SkeletonMappingSample(); 
} 

這個表達式在調用時會實例化一個新的SkeletonMappingSample:

var newMappingSample = _createSample[0](); 
+0

這是一個「集合初始化」不是一個對象初始化。他們是兩個完全不同的東西。 – Servy 2013-04-05 13:48:25

+0

這隻能說明它創建了一個func數組,然後包含了有關lambdas等的其他不必要的信息,這個問題只是關於語法如何從給定的一組項目初始化數組。 – Clint 2013-04-05 14:04:13

相關問題