C# 类与结构体的区别(属性与变量)
定义一个结构体MyStruct,
public struct MyStruct
{
public int a ;
public int b;
}
public class MyClass
{
public MyStruct mm_Struct = new MyStruct();//变量
public MyStruct Struct //属性
{
get{return mm_Struct;}
set{mm_Struct=value;}
}
}
写代码时:
MyClass m_class = new MyClass();
m_class.mm_Struct.b = 9;
m_class.Struct.b = 9;
最后一个代码提示
“ 错误 1 无法修改“WindowsFormsApplication1.MyClass.Struct”的返回值,因为它不是 变量”
本人新人,希望大家指教
------解决方案-------------------- m_class.Struct返回了一个结构的
拷贝,而拷贝上作改变没有意义,因此编译器给出错误信息。
可以改为写回
整个结构。
var s = m_class.Struct;
s.b = 9;
m_class.Struct = s;
------解决方案--------------------m_class.mm_Struct.b = 9;
调用的是get而不是set
相当于如下代码:
x = m_class.get_mm_Struct();
x.b = 9;
------解决方案--------------------
不要这么总结。
本质是值类型传递的是副本,引用类型传递的是引用。
这里所说的传递,包括了方法的调用以及return。
就是说
void a(MyStruct m){}
a(new MyStruct());
上面方法体里面的m和外面的MyStruct对象不是同一个,而是外面那个对象的副本。
同理
void MyStruct a(){return new MyStruct();}
MyStruct ms = a();
ms和return的MyStruct对象不是同一个,而是副本而已。