变量和属性之间的这种区别,原因是什么?

phommy 2014-07-03 11:10:22
代码如下.... 为什么对变量就有效,对属性调用就无效呢?
公司规范不允许出现public变量,这种情况下我想让属性达到变量的效果,要怎么写呢?


class MyClass
{
public Point p;
public Point p2 { get; set; }
}

[STAThread]
public static void Main()
{
var m = new MyClass();
m.p.Offset(1, 1); //{1,1}
m.p2.Offset(1, 1); //{0,0}
}
...全文
122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzjder 2014-07-03
  • 打赏
  • 举报
回复
class MyClass { private Point p; public Point p2 { get {return p}; set {p=p2}; } } 应该是这样的
bdmh 2014-07-03
  • 打赏
  • 举报
回复
p2是个属性,它要通过get方法返回你要访问的Point对象,然后对这个对象做修改

            private Point _p;
            public Point P2
            {
                get { return _p; }
            }
zzjder 2014-07-03
  • 打赏
  • 举报
回复
class MyClass { private Point p; public Point p2 { get this.value; set p2=p; } }
tiannailu 2014-07-03
  • 打赏
  • 举报
回复
因为Point是struct,是值类型的。 属性编译后会以函数的形式存在程序中,所以你拿到的p2是个拷贝。 使用方法:声明临时变量temp,修改temp,然后再赋值给p2.
moonwrite 2014-07-03
  • 打赏
  • 举报
回复
应该有效的~下断点看看~
by_封爱 版主 2014-07-03
  • 打赏
  • 举报
回复
引用
公司规范不允许出现public变量
smthgdin_020 2014-07-03
  • 打赏
  • 举报
回复
引用 6 楼 smthgdin 的回复:
MyClass m = new MyClass(); m.p.Offset(1, 1); //p{1,1} m.p2 = new Point(0,1); var tmp = m.p2; //tmp{0,1} tmp.Offset(1, 2); //tmp{1,3} m.p2.Offset(1, 2); //p2{0,0} 这么奇怪的问题,其实是因为值类型和引用类型的区别。
m.p2.Offset(1, 2); //p2{0,0} 应为: m.p2.Offset(1, 2); //p2{0,1}
smthgdin_020 2014-07-03
  • 打赏
  • 举报
回复
引用 6 楼 smthgdin 的回复:
MyClass m = new MyClass(); m.p.Offset(1, 1); //p{1,1} m.p2 = new Point(0,1); var tmp = m.p2; //tmp{0,1} tmp.Offset(1, 2); //tmp{1,3} m.p2.Offset(1, 2); //p2{0,0} 这么奇怪的问题,其实是因为值类型和引用类型的区别。
m.p2其实等于var tmp = m.p2; 因为point是指类型这里相当于给一个新的变量赋值,所以offset操作的是tmp。不是p2。
smthgdin_020 2014-07-03
  • 打赏
  • 举报
回复
MyClass m = new MyClass(); m.p.Offset(1, 1); //p{1,1} m.p2 = new Point(0,1); var tmp = m.p2; //tmp{0,1} tmp.Offset(1, 2); //tmp{1,3} m.p2.Offset(1, 2); //p2{0,0} 这么奇怪的问题,其实是因为值类型和引用类型的区别。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧