Ich habe eine Klasse namens ItemBase, von der eine Reihe von Klassen erben.Was ist der beste Weg, um semi-konstante Klassenvariablen in C# zu definieren?
In dieser Klasse habe ich eine Reihe von einzeiligen Methoden, die einfach einen String oder Objekt zurückgeben und sind zu allen Vererbungsklassen zur Verfügung. Ich benutze diese ziemlich oft in vererbten Klassen, um Code lesbarer zu machen und damit ich immer einen einzigen Ort habe, der jede Berechnung oder Information definiert.
Ich benutzte Getter, wie ich in PHP und Java tun, da dies der Weg ist, habe ich es immer getan:
public class ItemBase
{
protected string GetApplicationPath()
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
protected string GetApplicationDataPath()
{
return GetApplicationPath() + @"..\..\..\TestServices\";
}
}
Allerdings habe ich bemerkt, dass Getter und Setter sind nicht wirklich verwendet in C# wie sie sind in Java oder PHP und und ich vermute, dass es eine bessere, prägnanter/Standard Weg, dies in C# zu tun.
Aber ich möchte nicht Klassenvariablen verwenden, da es nicht richtig scheint, Logik in der Variablenvariable a-Klasse zu definieren, nehme ich an, dass obwohl für einige Berechnungen möglich, es wahrscheinlich verpönt ist und Probleme verursacht in einigen Fällen:
protected string _applicationPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
bleibe ich von öffentlichen Bereichen entfernt nach etwa Nachteile Lesen Sie mit ihnen die Straße hinunter in Jon Skeet's article. Plus das ist zu viel Code für nur eine einfache Definition.
protected string ApplicationPath
{
get
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
}
kann ich C# 's abgekürzt Eigenschaften verwenden, aber dann jedes kleines Stück Information hat Code an zwei Stellen und der Name zweimal verwendet wird, scheint nicht nur wie eine prägnante Lösung.
protected string ApplicationPath { get; set; }
public ItemBase()
{
ApplicationPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
Also habe ich auf siedelten diese Getter mit genau wie ich in PHP und Java tun, obwohl dies eine sehr C# Weg zu sein scheint nicht, darüber zu gehen.
Welche Konventionen verwenden Sie in C# zum Speichern dieser "Ein-Zeilen-Klassenvariablen", die nur eine Information enthalten oder eine kleine Berechnung durchführen?
ANTWORT:
protected string ApplicationPath
{
get { return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase); }
}
protected string ApplicationDataPath
{
get { return ApplicationPath + @"..\..\..\TestServices\"; }
}
Wenn Sie einen "Property Get" -Stil dafür verwenden, sollten Sie es nicht "GetApplicationPath" nennen; nennen Sie es stattdessen "ApplicationPath". "Verb" -ähnliche Namen sind eher für einfache Methoden geeignet. Eine "Name" -ähnliche Konvention ist eher für Eigenschaften geeignet. –
Danke, behoben. –