引用一个对象的成员和引用一个基类型的变量哪个效率高一些呢?
如:
obj.Member;//Member 是int类型
int i;
如果程序下文有好多引用的地方我该直接用obj.Member,还是用i=obj.Member,然后引用i呢?
小弟不才,请赐教。
例:
i=obj.Member
if(i>0)
{
Console.WriteLine(i.ToString());
}
.......
i....
.......
i....
.......
i....
.......ORif(obj.Member>0)
{
Console.WriteLine(obj.Member.ToString());
}
.......
obj.Member....
.......
obj.Member....
.......
obj.Member....
.......

解决方案 »

  1.   

    i=obj.Member不是引用。是赋值
    如果你的Member是字段,则无所谓,如果是属性就慢。
    因为属性的访问实际上是调用get方法。方法调用就要创建堆栈,自然会慢很多。但如果是成员变量(字段)。就没差别。
      

  2.   

    public MyClass
    {
        public Value = 0;
        private n = 0;
        public Member
        {
            get{return n;}
            set{n = value;}
        }
    }MyClass obj = new MyClass();
    obj.Value是直接访问内存,速度很快。
    obj.Member是转为调用get_Member方法,调用的时候创建堆栈,获得结果。
    int i = obj.Member;//不是引用,是复制,值类型是复制一个副本的,i的修改不影响obj.Member
    i的访问和obj.Value的访问方式以及效率是一样的。
      

  3.   

    public MyClass
    {
        public Value = 0;
        private n = 0;
        public Member
        {
            get{return n;}
            set{n = value;}
        }
    }MyClass obj = new MyClass();
    obj.Value是直接访问内存,速度很快。
    obj.Member是转为调用get_Member方法,调用的时候创建堆栈,获得结果。
    int i = obj.Member;//不是引用,是复制,值类型是复制一个副本的,i的修改不影响obj.Member
    i的访问和obj.Value的访问方式以及效率是一样的。---------------------------
    忘记加格式了。这样直观一点。
      

  4.   

    @1,3楼高手:
    使用属性不是在CLR时,实际是以内联的方式进行的吗?访问方法实际被转换为代码的执行。
    难道这样会降低执行效率吗?