Dies könnte eine einfache sein, aber mein Kopf weigert sich, um diese zu wickeln, so dass eine Außenansicht in diesem Fall immer nützlich ist!C# -Klasse Design mit generischer Struktur
Ich muss eine Objekthierarchie entwerfen, um eine Parameterregistrierung für einen Patienten zu implementieren. Dies wird zu einem bestimmten Zeitpunkt stattfinden und eine Anzahl verschiedener Parameter über einen Patienten sammeln (Blutdruck, Herzfrequenz usw.). Die Werte dieser Parameterregistrierungen können unterschiedlicher Art sein, z. B. Strings, Integer, Floats oder sogar Guids (für Lookup-Listen).
So haben wir:
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; }
}
UPDATE: Dank der Anregungen, hat sich das Modell gemorpht nun folgendes:
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;}
}
die in der Tat ein bisschen einfacher, aber jetzt frage ich mich, da die IList in ParameterRegistration auf die abstrakte ParameterRegistrationValue Objekt, wie werde ich in der Lage, th zu bekommen e Istwert out (da es auf den Unterobjekten gespeichert ist)?
Vielleicht ist die ganze allgemeine Sache ist in der Tat nicht ganz die Art und Weise, nachdem alle zu gehen: s
Und was ist die Frage und warum verwenden Sie öffentliche Fieds? –
Sie haben nicht erwähnt, was Ihr Problem ist. –
Was * fehlt * du hier? Funktioniert das nicht? Wo/wie scheitert es? –