o zaman kalan diyelim BarPropertyInA
başlatılıyor sözdizimi beni kelimeler Tanınmayan C# sözdizimi
public static void Main(string[] args)
{
var foo = new Foo
{
IntPropertyInFoo = 123,
BarPropertyInA = // Ommiting new and type name - why does it compile?
{
StringPropertyInBar = "something"
}
};
}
, kod derlemesinin çünkü uyarılar olmadan ve çalıştırıldığında,
NullReferenceException
atar. Bu sözdizimini tanımıyorum, ancak bir özellik yerine bir alanla kullanıldığında aynı etkiye sahip gibi görünüyor. benziyor
.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 34 (0x22)
.maxstack 3
.locals init ([0] class Test.Foo foo)
IL_0000: nop
IL_0001: newobj instance void Test.Foo::.ctor()
IL_0006: dup
IL_0007: ldc.i4.s 123
IL_0009: callvirt instance void Test.Foo::set_IntPropertyInFoo(int32)
IL_000e: nop
IL_000f: dup
IL_0010: callvirt instance class Test.Bar Test.Foo::get_BarPropertyInA()
IL_0015: ldstr "something"
IL_001a: callvirt instance void Test.Bar::set_StringPropertyInBar(string)
IL_001f: nop
IL_0020: stloc.0
IL_0021: ret
} // end of method Program::Main
: derlenmiş kod Disassembling
bu verir
public static void Main(string[] args)
{
var foo = new Foo
{
IntPropertyInFoo = 123
};
foo.BarPropertyInA.StringPropertyInBar = "something";
}
Yani bu tesisin/alanın üyelerini başlatılıyor için bazı sözdizimsel şeker olması gerekiyordu olduğunu koşuluyla özellik/alan kurucuda başlatıldı?
Bu yüzden, sınıf kurucumdaki diğer sınıfları ve listeleri her zaman yeni ekledim. – Gavin
Eğer 'BarPropertyInA' yeni bir 'Bar' olarak ayarlayan 'Foo' için bir kurucu vardı, o zaman bu sadece 'StringPropertyInBar' özelliğini ayarlamanızı sağlar. Bunun yerine "BarPropertyInA.StringPropertyInBar =" birşeyler " – juharr
" gibi bir şeyle gittiler. Aynısını dizinin yapıcıları ve benzerleri ile yaptım. .Net, – maximdumont