如果S仅是一个对象,你这样使用是没有什么意义的,using一般用天连接数据,然后对数据库中的对象操作
解决方案 »
- C#中怎么把函数的返回值在textbox中输出??新手求助
- 怎么识别excel表格中的回车(alt+enter)
- C#做类似hidetoolz那样的进程隐藏工具,如何实现?
- 通过winform开发一个小模块,就是短信猫的短信的接收和发送
- 为什么总报找不到类型或命名空间名称DataSet”错误
- Xls 默认数据长度为7的字段,导入到 DataSet 以后,Xls字段里面不满7位的数据前面自动添加的 0 为什么被 DataSet 砍掉了呢?
- [提问]关于进度条的制作
- 获奖概率,奖品1,奖品2
- 怎么才能弹出这个对话框
- Dns.GetHostAddresses的问题
- C# WinForm 最大化问题
- C#如何接收JS传递过来的参数。
你说的对,这个S就是一个struct>
难道C#有规定说,using里面只能修改class不能修改struct?
这样规定的意义是什么呢?谢谢。
你说的对,这个S就是一个struct>
难道C#有规定说,using里面只能修改class不能修改struct?
这样规定的意义是什么呢?谢谢。using关键字包含的对象是需要实现IDisposable接口的,否则因为无法释放资源而不能使用USING声明,
结构体的话,应该是不能用using的。至于为什么不能修改,就不知道了。同求大神说明。。
++++或许是因为结构体无法用using声明导致.....+++++
所以在只读状态下(比如using和foreach内部)是不可以修改的.
{
class Program
{
static void Main(string[] args)
{
using (S s = new S())
{
Console.WriteLine(s);
s.x = 2;
s.y = 3;
Console.WriteLine(s);
}
Console.ReadKey();
}
} public class S : IDisposable
{
public int x { get; set; }
public int y { get; set; } public void Dispose()
{
} public override string ToString()
{
return string.Format("x={0}, y={1}", x, y);
}
}
}
看看c#编译器给你什么反馈。
你说的对,这个S就是一个struct>
难道C#有规定说,using里面只能修改class不能修改struct?
这样规定的意义是什么呢?谢谢。正如#8楼所说,编译器防止你滥用struct而犯错。因为struct是随时都在拷贝复制对象的,而不是真正高效率地引用对象的。而using这类代码,要求在using(...)这个部分对引用的对象进行处理,而避免将来多你拷贝的副本进行处理。
也就是using一个引用的时候,lock是引用本身,而不是引用的对象。lock了一个结构体就是lock了结构体本身。
明白了!