C# 里所有的注意事项
C# 里所有的注意事项:
1. 类成员的访问权限:
A. Public:允许外界访问。
B. Private 不允许外界访问,也不允许派生类访问。
C. Protected:不允许外界访问,但允许派生类访问。
D. Internal:允许同一个命名空间中的类访问。
2. 在while括号后面不要加分号,因为加分号后,就表示while语句中的循环体代表空语句。不过有时可以将while语句的循环体中的语句放在while后面的括号中去,这时就可在while括号后面加上一个分号。如例4.8中的while语句可以表示如下:
//…
while(s+=I++,I<=10);
Console.WriteLine(“1+2+3+…+10={0}”,s);
程序执行结果完全相同,但一般不提倡这种用法,因为它损害了程序的可读性。
3. 如果有多重循环,不是跳出所有的循环,而是执行其后的语句。
4. 如果程序中的break语句不是包含在while,do…while,for 和foreach循环语句及swich选择语句中,则在编译程序时会出错。
5. 在C#中,在一个方法定义语句中,不能再包含加一个方法的定义语句,即方法不能嵌套定义,否则就会出错。
6. 方法的返回值也称方法值,方法返回的不是方法本身,而是一个值。
7. 在把引用型实参的值传递给形参之前,必须先对其值,这一点是引用型参数与输出型参数的不同之处。
8. 在C#语言中,有引用类型参数与输出型参数之分,但在。NET的其他语言(如VB。NET、C++托管扩展)中,则没有这种分类,而是把它们统一视作引用型参数。
9. NEW运算符表示创建某种类型的实例,但并不表示是进行动态内存分配。比如:使用NEW运算符创建类型实例时,除了该实例所属的变量外,并不需要额外分配内存空间,因而也就不会进行动态内存分配。这一点是C#与C++的不同之处。
10. 造函数不能被继承,因而,任何一个类都只能使用在该类中定义的构造函数,如果一个类中没有专门定义构造函数,C#会为类提供一个默认的构造函数。
11. 在C++中有一个this指针,它是每个对象中隐藏的指针。当一个对象生成后,该对象的this指针就指向内存中保存该对象数据的
12. 只读字段只能在字段的定义语句中为其赋值,或者在它所属类的构造函数中为其赋值或修改值,而在其他任何地方都是只读的,不能对其值进行修改。
13. 在对类的实例字段执行初始化时,不能引用刚被创建的实例。因此,在执行字段的初始化时,不能用简单的变量名称来引用类的实例成员,也不能引用this关键字,如下面的代码所示:
using System;
class Test
{
protected int x=10;
protected int y=x*2;
public static void Main()
{
Test test=new Test();
Console.writeLine(“{0},{1}”,test.x,test.y);
}
}
编译该程序,系统提示出错,出错语句即是protested int y=x*2,出错原因是:字段初始值设定项无法引用非静态字段、方法或属性test.x.
14. 尽管访问索引指示器元素的方法与访问数组元素的方法相似,但是索引指示器元素不是作为变量分类的,因而不可能指索引指示器元素作为引用型或输出型参数传递。
15. 在。NET平台上,在类中定义一个类型为T、形参为P的索引指示器时,如果再在该类中定义下面两种形式的方法:
T get_Item(p)
Void set_Item(P,T value)
此时,程序出错。
16. 当对一个静态字段执行E。M这样的成员访问格式的访问引用时,E必须表示是一种类型,否则程序会出错。
1. 类成员的访问权限:
A. Public:允许外界访问。
B. Private 不允许外界访问,也不允许派生类访问。
C. Protected:不允许外界访问,但允许派生类访问。
D. Internal:允许同一个命名空间中的类访问。
2. 在while括号后面不要加分号,因为加分号后,就表示while语句中的循环体代表空语句。不过有时可以将while语句的循环体中的语句放在while后面的括号中去,这时就可在while括号后面加上一个分号。如例4.8中的while语句可以表示如下:
//…
while(s+=I++,I<=10);
Console.WriteLine(“1+2+3+…+10={0}”,s);
程序执行结果完全相同,但一般不提倡这种用法,因为它损害了程序的可读性。
3. 如果有多重循环,不是跳出所有的循环,而是执行其后的语句。
4. 如果程序中的break语句不是包含在while,do…while,for 和foreach循环语句及swich选择语句中,则在编译程序时会出错。
5. 在C#中,在一个方法定义语句中,不能再包含加一个方法的定义语句,即方法不能嵌套定义,否则就会出错。
6. 方法的返回值也称方法值,方法返回的不是方法本身,而是一个值。
7. 在把引用型实参的值传递给形参之前,必须先对其值,这一点是引用型参数与输出型参数的不同之处。
8. 在C#语言中,有引用类型参数与输出型参数之分,但在。NET的其他语言(如VB。NET、C++托管扩展)中,则没有这种分类,而是把它们统一视作引用型参数。
9. NEW运算符表示创建某种类型的实例,但并不表示是进行动态内存分配。比如:使用NEW运算符创建类型实例时,除了该实例所属的变量外,并不需要额外分配内存空间,因而也就不会进行动态内存分配。这一点是C#与C++的不同之处。
10. 造函数不能被继承,因而,任何一个类都只能使用在该类中定义的构造函数,如果一个类中没有专门定义构造函数,C#会为类提供一个默认的构造函数。
11. 在C++中有一个this指针,它是每个对象中隐藏的指针。当一个对象生成后,该对象的this指针就指向内存中保存该对象数据的
12. 只读字段只能在字段的定义语句中为其赋值,或者在它所属类的构造函数中为其赋值或修改值,而在其他任何地方都是只读的,不能对其值进行修改。
13. 在对类的实例字段执行初始化时,不能引用刚被创建的实例。因此,在执行字段的初始化时,不能用简单的变量名称来引用类的实例成员,也不能引用this关键字,如下面的代码所示:
using System;
class Test
{
protected int x=10;
protected int y=x*2;
public static void Main()
{
Test test=new Test();
Console.writeLine(“{0},{1}”,test.x,test.y);
}
}
编译该程序,系统提示出错,出错语句即是protested int y=x*2,出错原因是:字段初始值设定项无法引用非静态字段、方法或属性test.x.
14. 尽管访问索引指示器元素的方法与访问数组元素的方法相似,但是索引指示器元素不是作为变量分类的,因而不可能指索引指示器元素作为引用型或输出型参数传递。
15. 在。NET平台上,在类中定义一个类型为T、形参为P的索引指示器时,如果再在该类中定义下面两种形式的方法:
T get_Item(p)
Void set_Item(P,T value)
此时,程序出错。
16. 当对一个静态字段执行E。M这样的成员访问格式的访问引用时,E必须表示是一种类型,否则程序会出错。