老师,您在丛林战争中Message类中这样写:
private byte[] data = new byte[1024];
public byte[] Data
{
get { return data; }
}
使用Data封装了一下data数组,没有用set,竟然也可以在外部通过Data修改data
我怀疑是引用类型的原因,因此用string类型测试:
class A
{
private string aaa = "abc";
public string AAA
{
get { return aaa; }
}
public void Output()
{
Console.Write(aaa);
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
a.AAA = "def"; // 提示只读不能修改
a.Output();
Console.ReadKey();
}
}
直接提示不能修改,但是用自定义类型测试:
class MyClass
{
public int x = 1000;
}
class A
{
private MyClass aaa = new MyClass();
public MyClass AAA
{
get { return aaa; }
}
public void Output()
{
Console.Write(aaa.x);
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
a.AAA.x = 2000;
a.Output();
Console.ReadKey();
}
}
结果输出是2000,和数组一样可以修改,这是什么原因呢?
如果引用类型和数组都可以通过get属性就可以修改,那么引用类型和数组的属性不是没有意义了吗?
这不是可以修改
数组还有下面的mycalss都是不能修改的
你修改的是对象里面的内容,并不是修改的这个变量
private byte[] data = new byte[1024];
public byte[] Data
{
get { return data; }
}
这里的data是一个数组
有两种修改方式
1,xx.data = xxx; 不允许 因为 data是private的 没有set
2,xx.data[1]=sss 允许,你修改的data里面的内容,并不是data这个变量本身
你的mycalss同理