Ich habe irgendwo gelesen, dass es besser ist, öffentliche Eigenschaften zu haben, als öffentliche Mitglieder in einer Klasse zu haben.
-
Liegt das nur an der Abstraktion und der Modularität? Gibt es noch andere Gründe, die übergeordnet sind?
-
Die Eigenschaftszugriffe werden vom Compiler in Funktionsaufrufe umgewandelt. Für Eigenschaften ohne Backup-Speicher (z.B.
public string UserName { get; set; }
), wie hoch wäre der Leistungsaufwand im Vergleich zu einem direkten Mitgliederzugriff? (Ich weiß, dass es normalerweise keinen Unterschied machen sollte, aber in einigen meiner Codes wird millionenfach auf Eigenschaften zugegriffen).
Bearbeiten1: Ich habe einige Testcodes über Integer-Mitglieder und Eigenschaften ausgeführt und die öffentlichen Mitglieder waren etwa 3-4 Mal so schnell wie die Eigenschaften. (~57 ms. vs. ~206 ms. in Debug und 57 vs. 97 in Release war der häufigste Laufwert). Bei 10 Millionen Lese- und Schreibvorgängen sind beide Werte klein genug, um eine Änderung nicht zu rechtfertigen.
Code:
class TestTime1
{
public TestTime1() { }
public int id=0;
}
class TestTime2
{
public TestTime2() { }
[DefaultValue(0)]
public int ID { get; set; }
}
class Program
{
static void Main(string[] args)
{
try
{
TestTime1 time1 = new TestTime1();
TestTime2 time2 = new TestTime2();
Stopwatch watch1 = new Stopwatch();
Stopwatch watch2 = new Stopwatch();
watch2.Start();
for (int i = 0; i < 10000000; i++)
{
time2.ID = i;
i = time2.ID;
}
watch2.Stop();
watch1.Start();
for (int i = 0; i < 10000000; i++)
{
time1.id = i;
i = time1.id;
}
watch1.Stop();
Console.WriteLine("Time for 1 and 2 : {0},{1}",watch1.ElapsedMilliseconds,watch2.ElapsedMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.In.ReadLine();
}
}