C# 禁止修改已装箱了的值类型的字段值,但是可以通过接口的方式实现
2016-07-18 17:57
627 查看
C# 默认是不能修改已装箱了的值类型中字段的值,但是可以通过 值类型实现指定的接口来改变
首先定义一个接口
在定义值类型的类,实现以上接口
最后,代码测试
首先定义一个接口
interface IChange { void Change(int a, int b); }
在定义值类型的类,实现以上接口
struct Point : IChange { private int x; private int y; public Point(int x,int y) { this.x = x; this.y = y; } /// <summary> /// 自己定义的方法 /// </summary> /// <param name="a"></param> /// <param name="b"></param> //public void Change(int a,int b) //{ // x = a; // y = b; //} /// <summary> /// 实现接口的方法,用来实现 修改已装箱值类型的值 /// </summary> /// <param name="a"></param> /// <param name="b"></param> public void Change(int a, int b) { x = a; y = b; } public override string ToString() { return string.Format("x:{0}, y:{1} ", x.ToString(), y.ToString()); } }
最后,代码测试
static void Main(string[] args) { Point p1 = new Point(1, 1); Console.WriteLine(p1);//1,1 p1.Change(2,2); Console.WriteLine(p1);//2,2 object o = p1; Console.WriteLine(o);//2,2 //** 1. 没有使用接口实现的时候,是不能直接修改已装箱 值类型中字段的值 //((Point)o).Change(3, 3);// (Point)o 生成临时的 point 存放在栈空间,跟 之前堆空间的 o 没有任何关系 //Console.WriteLine(o);//2,2 //** 2. 使用接口的方式,可以实现直接修改 已装箱 值类型中字段的值 ((IChange)o).Change(3, 3);// 将对象o 强制转换成 接口 IChange 对象,由于都是引用类型,不会装箱,所以,调用接口的方法就可以修改值了 Console.WriteLine(o);//3,3 ((IChange)p1).Change(3, 3);// Console.WriteLine(p1);//2,2 输出值类型本身栈中的值 Console.Read(); }
相关文章推荐
- C#中的int冒泡排序)
- C#字符串和ASCII码的转换
- C# 扩展方法 总结
- C#:调用webservice时提示对操作的回复消息正文进行反序列化时出错
- C#中浮点数依IEEE-754标准转二进制串 (MODBUS 浮点数转换)
- txt文件中存储多行标题+空格+作者名,现按格式“标题+|+作者”的形式输出
- 中文名转换成英文名(c#)
- C#通过XPath解析xml文件
- 右击/左击treeview,获取树节点
- c# AD域 权限管理
- C#.net Page加载顺寻及回发时执行顺序
- C#中如何获取鼠标的位置坐标
- C# 结构体 struct
- C#学习篇(七)结构体
- C#读取文件的实时进度条
- XML编码utf-8有中文无法解析或乱码 C#
- (转载)C# 编程 使用可空类型
- @使转移字符无效
- [通信] C#多线程Socket-文件传输
- C#变量