C#基础
1、栈存地址和值类型,堆存对象数据。
2、var,编译器类型推断
3、不能用从变量中提取出来的值来初始化常量,如果需要这么做,应使用只读字段;
4、常量总是隐式静态的,const关键字:
1)使用易读取名称,便于阅读;
2)便于程序(业务)逻辑变更,比如税率SalesTax=6%;
3)避免程序犯错,如别处赋值则编译器报错。
5、C#数据存储:值类型存储在堆栈(Stack)中,而引用类型存储在托管堆(Managed Heap)中。CLR会做内存管理,调用垃圾回收期实现内存回收。
6、C#有15个预定义类型,其中两个引用类型(string 和 object),13个是值类型。
1)C#中的int 声明的实际上是.Net 结构System.Int32的一个实例,看起来很深奥,但其意义深远:这表示在语法上,可以把所有的基本数据类型看成支持某些方法的类。例如:int i=10;string s=i.ToString();
2)C#的decimal类型不是基本类型,计算时使用该类型会有性能损失。28位(128位的高精度十进制数表示法)decimal d=12.30M;或者decimal d=12.30m.
3)C# bool=true 或false:如果试图用0表示false,非0表示true,就会报错。
4)Byte(无符号)、sbyte(有符号),标准8位类型,
5)字符类型:char 表示一个16位的Unicode字符
7、Object类: 是C#和.net的根类型:例如堆栈中的值类型对象通过object装箱到堆中.实现了一些基本方法,可以重写,如Equals()、GetHashCode(),GetType()和ToString().
8、C# string实际上是.Net 类System.String,是个引用类型。但又会体现值类型的字符串一般和直观的字符串规则特点,是通过运算符重载实现的。如:string s1="a string"; string s2=s1;s1="Another string";结果:s1="Another string" s2="a string"
9、字符串:通过@字符消除转义字符“\”,$字符串插值功能
10、使用if语句的一个重要指导原则就是:
1)只有语句和if语句写在同一行时,才允许程序员不适用花括号。遵循之,程序员在添加第二个语句时不太可能不添加花括号。
2)比较好的习惯:都要加花括号,无论几行逻辑语句。(如果没有else。。。)
3)值比较== 常值置于前 if(0==j)
11、Switch语句:可以包含一条default语句。任何两条case都不能相同,否则编译器报错:break可用
const string england="uk";
const string britain="uk";
switch(country)
{
case england:
case britain://编译会报错
language="English";
break;
}
12、循环for, while ,do...while,foreach(不能改变集合中各项的值,否则不能编译,如改变应使用for循环),break、Continue 可用
但这样是可以的:
foreach (var item in resultList)
{
Apple a = item as Apple;
if (a != null)
{ a.Color = "Red"; }
}
13、return
14、枚举:是用户定义的整数类型,枚举实例是一组易于记忆的整数值。C#中,枚举的真正强大之处是它们在后台实例化为派生自基类System.Enum的结构。一旦代码编译好,枚举就成为基本类型,与int类似。
1)可以检索枚举的字符串表示:
public enum TimeOfDay
{
Morning = 0,
Afternoon =1,
Evening =2
}
TimeOfDay time=TimeOfDay.Evening ;TimeOfDay time2=(TimeOfDay)Enum.Parse(typeof(),TimeOfDay,"afternoon ",true);
15、名称空间 namespace,可以嵌套,using,别名 using alias=NamespaceName;
16、使用注释:源文件的内部注释:单行// ,多行/*...*/
17、XML文档 根据特定注释自动创建XML格式的文档说明
18、C#预处理器指令