У меня есть приложение для мониторинга, которое получает обработку обновлений от других приложений через WCF. Ранее отслеживаемые приложения имели один класс «update» для отправки данных в приложение мониторинга. Сейчас я пишу абстрактный базовый класс, который выглядит следующим образом
public abstract class Update
{
public readonly DateTime TimeStamp;
public readonly int AppId;
public Update()
{
TimeStamp = DateTime.Now;
AppId = SomeMethodThatCalculatesId();
}
private int SomeMethodThatCalculatesId()
{
// my calculations ...
}
}
Вот пример подкласса
public class ProcessUpdate : Update
{
public readonly string ProcessMessage;
public ProcessUpdate(string processMessage) : base()
{
if (string.IsNullOrEmpty(processMessage))
{
throw new ArgumentNullException("processMessage");
}
ProcessMessage = processMessage;
}
}
Я хочу иметь возможность отправлять приложению мониторинга все, что происходит от Update
, и хочу предотвратить создание экземпляра Update, поэтому оно абстрактно. Я хочу, чтобы одна реализация для моего поколения AppId и для производных классов не беспокоилась об этом или не изменяла его, поэтому AppId доступен только для чтения.
Требуется ли для Update
тег DataContract
или это требуется только для моих подклассов? Если это так, могу ли я по-прежнему украшать TimeStamp
и AppId
с помощью DataMemeber
без DataContract
и по-прежнему получать доступ к этим свойствам в приложении для мониторинга?