我在某个地方读到,拥有公共属性比拥有公共成员更可取。
这只是因为抽象和模块化吗?还有其他的主要原因吗?
编译器将属性访问转换为函数调用。对于没有备份存储的属性(例如
public string UserName { get; set; }
),与直接成员访问相比,性能开销会有多大?(我知道通常不会有什么区别,但在我的某些代码中,属性被访问数百万次。)
编辑1: 我运行了一些关于整数成员和属性的测试代码,公共成员大约比属性快3-4倍。(在Debug中,公共成员的时间是57 ms,而属性的时间是206 ms;在发布版中,时间分别为57和97,这是最常见的运行值)。对于1000万次读写操作,两者都很小,不足以证明任何更改。
代码:
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();
}
}