Это может быть просто, но моя голова отказывается оборачиваться вокруг этого, поэтому внешний вид всегда полезен в этом случае!
Мне нужно спроектировать иерархию объектов для реализации регистрации параметров для пациента. Это произойдет в определенный день и соберет ряд различных параметров о пациенте (артериальное давление, сердечный ритм и т. Д.). Значения этих регистраций параметров могут быть разных типов, таких как строки, целые числа, числа с плавающей запятой или даже направляющие (для списков поиска).
Итак, мы имеем:
public class ParameterRegistration
{
public DateTime RegistrationDate { get; set; }
public IList<ParameterRegistrationValue> ParameterRegistrationValues { get; set; }
}
public class ParameterRegistrationValue
{
public Parameter Parameter { get; set; }
public RegistrationValue RegistrationValue { get; set; } // this needs to accomodate the different possible types of registrations!
}
public class Parameter
{
// some general information about Parameters
}
public class RegistrationValue<T>
{
public RegistrationValue(T value)
{
Value = value;
}
public T Value { get; private set; }
}
ОБНОВЛЕНИЕ : Благодаря предложениям модель теперь трансформировалась в следующее:
public class ParameterRegistration
{
public DateTime RegistrationDate { get; set; }
public IList<ParameterRegistrationValue> ParameterRegistrationValues { get; set; }
}
public abstract class ParameterRegistrationValue()
{
public static ParameterRegistrationValue CreateParameterRegistrationValue(ParameterType type)
{
switch(type)
{
case ParameterType.Integer:
return new ParameterRegistrationValue<Int32>();
case ParameterType.String:
return new ParameterRegistrationValue<String>();
case ParameterType.Guid:
return new ParameterRegistrationValue<Guid>();
default: throw new ArgumentOutOfRangeException("Invalid ParameterType: " + type);
}
}
public Parameter Parameter { get; set; }
}
public class ParameterRegistrationValue<T> : ParameterRegistrationValue
{
public T RegistrationValue {get; set; }
}
public enum ParameterType
{
Integer,
Guid,
String
}
public class Parameter
{
public string ParameterName { get; set; }
public ParameterType ParameterType { get; set;}
}
что на самом деле немного проще, но теперь мне интересно, так как IList в ParameterRegistration указывает на объект abstract ParameterRegistrationValue, как я смогу получить фактическое значение (так как оно хранится на подобъектах)?
Может быть, в общем и целом, в общем-то, это не совсем то, что нужно: s