문제

직렬화 가능한 클래스 만 수용하는 일반적인 수업을 만들고 싶습니다. 어디에 제약 조건으로 수행 할 수 있습니까?

내가 찾고있는 개념은 이것입니다.

public class MyClass<T> where T : //[is serializable/has the serializable attribute]
도움이 되었습니까?

해결책

아니, 나는 두려워하지 않는다. 제약으로 할 수있는 유일한 일은 다음과 같습니다.

  • where T : class -t는 참조 유형이어야합니다
  • where T : struct -t는 불가능한 값 유형이어야합니다
  • where T : SomeClass -t는 someclass이거나 그로부터 파생되어야합니다
  • where T : ISomeInterface -t는 isomeinterface이거나 구현되어야합니다
  • where T : new() - t에는 공개 매개 변수가없는 생성자가 있어야합니다

다양한 조합이 가능하지만 전부는 아닙니다. 속성에 대해서는 아무것도 없습니다.

다른 팁

내가 아는데 것을; 너는 이것을 못해. 하지만 '초기화'메소드를 추가하거나 비슷한 것을 추가하는 것이 있습니까?

public void Initialize<T>(T obj)
{
     object[] attributes = obj.GetType().GetCustomAttributes(typeof(SerializableAttribute));
     if(attributes == null || attributes.Length == 0)
          throw new InvalidOperationException("The provided object is not serializable");
}

나는이 코드를 테스트하지 않았지만 내 요점을 얻을 수 있기를 바랍니다.

두려워하지 마십시오. 당신이 할 수있는 최선은 런타임 확인입니다 유형 .Serializable.

직렬화 가능한 수업을 찾고 있다면 운이 좋지 않다고 생각합니다. 만든 객체를 찾고 있다면 직렬화 가능한 기본 클래스를 만들고 지원하려는 모든 클래스를 만들 수 있습니다.

나는 이것이 오래된 것을 알고 있지만 정적 생성자를 사용하여 확인하고 있습니다. 나중에는 있지만 런타임에 오류를 던질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top