Как ограничить метод десериализации определенным экземпляром классаC#

Место общения программистов C#
Ответить
Anonymous
 Как ограничить метод десериализации определенным экземпляром класса

Сообщение Anonymous »

У меня есть статический класс для десериализации, который должен быть доступен только некоторым частям класса, поскольку только этот экземпляр класса можно десериализовать из XML-файлов и привести к этому типу класса.

Код: Выделить всё

public static class Deserializer()
{
public static T deserialize(string path)    // T should be the classes that can do deserialization
{
// do deserialization
return (T)(deserializedObject)
}
}

public class CanDoDeserialization()
{
// class properties and methods
}

public class CannotDoDeserialization()
{
// class properties and methods
}

public class Program
{
public void Main()
{
CanDoDeserialization canInstance = new CanDoDeserialization()
canInstance = Deserializer.deserialize(somePath)      //this should be okay

CannotDoDeserialization cannotInstance = new CannotDoDeserialization()
cannotInstance = Deserializer.deserialize(somePath)    // this should raise compilation error
}
}

Но я не знаю, как это реализовать. Использование универсального метода десериализации, как указано выше, приводит к ошибке: «Аргументы типа для метода «десериализация» не могут быть выведены из использования. Попробуйте явно указать аргументы типа». Я читал об интерфейсе, но кажется, что он может ограничивать только те классы, которые реализуют интерфейс, но не те классы, которые этого не делают? И позволить классу CanDoDeserialization наследовать от Deserializer тоже звучит неправильно, не говоря уже о том, что наследование от статического класса запрещено.
Очень признателен, если кто-нибудь может дать несколько советов по этому поводу. Спасибо.

Дополнительная информация:
Приведенный выше код представляет собой упрощенную версию. Мне нужно общее решение, если, скажем, у меня есть 10 классов, которые могут выполнять десериализацию, и 10, которые не могут. Каков наилучший подход к обобщению этого метода десериализации, который может быть реализован этими 10 классами (или даже больше)?

Подробнее здесь: https://stackoverflow.com/questions/790 ... s-instance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»