7 EKİM 2008, Salı
Nasıl XML kaldırması bir kurucu çağırmadan nesneler oluşturmak mı?
Bazı sihirli XML kaldırması oluyor. Nasıl onun kurucu çağırmadan veri örnek Sözleşme bir tür oluşturmak mı?
Örneğin, bu veri sözleşme göz önünde bulundurun:
[DataContract]
public sealed class CreateMe
{
[DataMember] private readonly string _name;
[DataMember] private readonly int _age;
private readonly bool _wasConstructorCalled;
public CreateMe()
{
_wasConstructorCalled = true;
}
// ... other members here
}
DataContractSerializer
) bu nesne örneği alınırken, saha _wasConstructorCalled
false
olduğunu göreceksiniz.
Nasıl XML bunu yapar mı? Bu başkalarının da kullanabileceği bir tekniktir, ya da bizden gizli mi?
CEVAP
7 EKİM 2008, Salı
FormatterServices.GetUninitializedObject()
bir kurucu çağırmadan bir örneğini oluşturur. Reflector kullanma ve çekirdek biraz didiklemeye bu kursu buldum .Serileştirme sınıfları Net.
Aşağıda örnek kodu kullanarak test ettik ve iyi çalışıyor gibi görünüyor:
using System;
using System.Reflection;
using System.Runtime.Serialization;
namespace NoConstructorThingy
{
class Program
{
static void Main()
{
// does not call ctor
var myClass = (MyClass)FormatterServices.GetUninitializedObject(typeof(MyClass));
Console.WriteLine(myClass.One); // writes "0", constructor not called
Console.WriteLine(myClass.Two); // writes "0", field initializer not called
}
}
public class MyClass
{
public MyClass()
{
Console.WriteLine("MyClass ctor called.");
One = 1;
}
public int One { get; private set; }
public readonly int Two = 2;
}
}
Bunu Paylaş:
Nasıl sınıf alanları, Visual Studio ve...
Kurucu çağırmadan nesne örneğini oluşt...
Kurucu-uzatma-yöntem oluşturmak mümkün...
Nasıl Java başka bir kurucu arayayım m...
Nasıl özel nesneler ile bir NSMutableA...