C#에서 속성을 요구하기 위해 "여기서"를 사용할 수 있습니까?
-
03-07-2019 - |
문제
직렬화 가능한 클래스 만 수용하는 일반적인 수업을 만들고 싶습니다. 어디에 제약 조건으로 수행 할 수 있습니까?
내가 찾고있는 개념은 이것입니다.
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.
직렬화 가능한 수업을 찾고 있다면 운이 좋지 않다고 생각합니다. 만든 객체를 찾고 있다면 직렬화 가능한 기본 클래스를 만들고 지원하려는 모든 클래스를 만들 수 있습니다.
나는 이것이 오래된 것을 알고 있지만 정적 생성자를 사용하여 확인하고 있습니다. 나중에는 있지만 런타임에 오류를 던질 수 있습니다.
제휴하지 않습니다 StackOverflow