콤보 상자에 항목을 채우고 싶습니다. 각각 다른 동작을합니다. 예 기본 클래스에서 파생 된 3 개의 클래스를 간단하게 만들 수 있음을 알고 있습니다. 그러나 제 질문은 "또 다른 방법이 있습니까"와 "가능한 것은 무엇인가"입니다. Java에서 "new MyClass() {public void overriddenmethod() {...}}"할 수 있지만 C#에서는 할 수 없습니까?C# 3.0 : 컬렉션에서 다른 동작을 가진 개체를 채우십시오.
이제는 람다를 사용하여 즉석에서 메서드를 정의하지만 나중에 해당 개체의 인스턴스 변수로 새 XxxFormatter()를 원한다는 것이 문제입니다. XxxFormatters는 공통 기본 클래스를 공유하지 않기 때문에 SerializingHelper 클래스에서 단일 필드로 사용할 수 없습니다.
아이디어가 있으십니까? 당신은 단지 새로운 시리얼 인스턴스마다 인스턴스화 방지하려면
public delegate void SerializingHandler(Stream s, object o);
class SerializingHelper
{
public string Name { get; set; }
public SerializingHandler Serializer { get; set; }
}
comboFormat.Items.AddRange(new object[]
{
new SerializingHelper{ Name = "Binary",
Serializer = (s,o)=>new BinaryFormatter().Serialize(s,o),
new SerializingHelper{ Name = "Soap",
Serializer = (s,o)=>new SoapFormatter().Serialize(s,o),
new SerializingHelper{ Name = "Xml",
Serializer = (s,o)=>new XmlSerializer(typeof(KontaktpartnerData), new Type[]
{typeof(ArrayList), typeof(KontaktPartner)}).Serialize(s,o), }
});
왜 형식화 프로그램을 클래스의 인스턴스 변수로 사용 하시겠습니까? 지금까지하지 않은 코드를 달성하기 위해 무엇을 시도하고 있습니까? –
현재 사용자가 콤보 상자의 포맷터를 사용할 때마다 새로운 포맷터 객체가 생성되므로 피하려고합니다. 나도 알아,이 특별한 시나리오의 성능은별로 중요하지 않습니다. 추가 속성 포매터 생성을 사용하여 디시리얼라이저를 삽입하면 추가됩니다. – codymanix