C# 语言特性
2017-01-21 13:48
330 查看
1 不支持将类型float隐式转换为int,毕竟会导致精度缺失,当然在C++语言中是允许的
代码
class Program
{
static void Main(string[] args)
{
float aa = 3;
int aaa = aa;
}
}
2 foreach不支持对遍历对象属性的修改
参考
http://www.cnblogs.com/chensuqian/p/4882207.html
http://www.cnblogs.com/jobs/archive/2004/07/17/25218.aspx
3 struct结构体变量是一种不可以为null值的类型
代码
public struct TreeNode
{
public int data;
public TreeNode leftChild;
public TreeNode rightChild;
public TreeNode parent;
}
尝试定义一棵树的节点,其中指向左右节点和双亲节点,编译出错:变量是一种不可以为null值的类型
正确
public class TreeNode
{
public int data;
public TreeNode leftChild;
public TreeNode rightChild;
public TreeNode parent;
}
4 修饰符“static”对该项无效
类方法的局部变量添加static关键字,再编译时 C# 编译器会报告以下错误:error CS0106: 修饰符“static”对该项无效
C# 语言不允许使用 static 修饰符来声明方法内部的变量。但是在 C/C++ 语言中是允许这么做的。因此只能在类中定义一个静态变量成员,然后提供给类方法调用
5不可访问,因为它受保护级别限制
为了访问结构体定义的成员,定义在结构体的public允许命名空间之外进行访问,如果需要访问结构体的变量成员,还必须在定义之前添加public关键字,这一点跟C++完全不一样
代码
public struct Link
{
public int startNodeID;
public int endNodeID;
public bool forward;
public bool backward;
public int length;
public int roadClass;
}
6 非泛型“***”不能与类型实参一起使用的错误
原因 缺少包含:using System.Collections.Generic;
代码 public class Cost { public double cost; public int id; }
public class CostComparer : IComparer<Cost> { public int Compare(Cost x, Cost y) { if (x.cost - y.cost < 1e-10) { return -1; } else { return 1; } } }
代码
class Program
{
static void Main(string[] args)
{
float aa = 3;
int aaa = aa;
}
}
2 foreach不支持对遍历对象属性的修改
参考
http://www.cnblogs.com/chensuqian/p/4882207.html
http://www.cnblogs.com/jobs/archive/2004/07/17/25218.aspx
3 struct结构体变量是一种不可以为null值的类型
代码
public struct TreeNode
{
public int data;
public TreeNode leftChild;
public TreeNode rightChild;
public TreeNode parent;
}
尝试定义一棵树的节点,其中指向左右节点和双亲节点,编译出错:变量是一种不可以为null值的类型
正确
public class TreeNode
{
public int data;
public TreeNode leftChild;
public TreeNode rightChild;
public TreeNode parent;
}
4 修饰符“static”对该项无效
类方法的局部变量添加static关键字,再编译时 C# 编译器会报告以下错误:error CS0106: 修饰符“static”对该项无效
C# 语言不允许使用 static 修饰符来声明方法内部的变量。但是在 C/C++ 语言中是允许这么做的。因此只能在类中定义一个静态变量成员,然后提供给类方法调用
5不可访问,因为它受保护级别限制
为了访问结构体定义的成员,定义在结构体的public允许命名空间之外进行访问,如果需要访问结构体的变量成员,还必须在定义之前添加public关键字,这一点跟C++完全不一样
代码
public struct Link
{
public int startNodeID;
public int endNodeID;
public bool forward;
public bool backward;
public int length;
public int roadClass;
}
6 非泛型“***”不能与类型实参一起使用的错误
原因 缺少包含:using System.Collections.Generic;
代码 public class Cost { public double cost; public int id; }
public class CostComparer : IComparer<Cost> { public int Compare(Cost x, Cost y) { if (x.cost - y.cost < 1e-10) { return -1; } else { return 1; } } }
相关文章推荐
- C# 3.0语言新特性(语言规范):5 匿名类型
- C# 3.0语言新特性(语言规范):8 表达式树
- C# 3.0语言新特性(一)
- c# 3.0 语言的新特性(四)
- c# 3.0 语言的新特性(三)
- C# 3.0语言新特性(语言规范):3 拉姆达表达式
- LINQ体验(3)——C# 3.0新语言特性和改进(下篇)
- C# 3.0语言规范 (C# 3.0新特性)
- CLR/C# 的一些语言特性
- LINQ体验(1)——C# 3.0新语言特性和改进(上篇) 【转】
- C# 3.0语言新特性(语言规范):7 查询表达式
- C# 3.0语言新特性(语言规范):3 拉姆达表达式
- C# 3.0语言新特性(语言规范):2 扩展方法
- 新的C#语言特性:自动属性(Automatic Properties)
- C# 3.0语言新特性(语言规范):7 查询表达式
- C# 3.0语言新特性(语言规范):6 具有隐式类型的数组
- C# 3.0语言新特性(语言规范):1 具有隐式类型的局部变量
- C# 3.0语言新特性(语言规范):5 匿名类型
- C# 3.5 语言新特性(一)
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇) 【转】