实例化使用new关键字把该引用存储在堆上的一个对象

一、类型推断使用var关键字。

  int somenumber=0;就变成var somenumber=0;即使somenumber没有声明为int,编译器也可以确定,只要在其作用域内就是一个int。

 var name = "ddd";
        var age = 22;
        var isRabbit = true;
        Type nameType = name.GetType();
        Type ageType=age.GetType();
        Type isRabbitType = isRabbit.GetType();
        Console.WriteLine(nameType.ToString());
        Console.WriteLine(ageType.ToString());
        Console.WriteLine(isRabbit.ToString());
        Console.ReadLine();
        return 0;
View Code

system.string

system.int32

system.boolean

变量必须初始化否则,编译器就没有推断变量类型的依据。

初始化器不能为空。

初始化器必须放在表达式中。

不能把初始化器设置为一个对象,除非在初始化器中创建了一个新的对象。

1、变量是类或结构中的字段,如果没有显示初始化,创建这些变量的时候,其默认值就是0.

2、方法的局部变量必须在代码中显示初始化,之后才能在语句中使用它们的值。此时初始化不是在声明该变量的时候进行的,但编译器会通过方法检查所有可能的路径,如果检测

  到局部变量在初始化之前就使用了它的值,就会产生错误。

二、变量作用域

字段和局部变量的作用域冲突。某些情况下,可以区分名称相同、作用域相同的两个标识符。此时编译器允许声明第二个变量。变量之间有一个最基本的区分。

    它把在类型级别声明的变量看做字段,,而把在方法中声明的变量看做局部变量。

三、常量

常量是其值在使用过程中不会发生变化的变量。在变量前面加上一个const,就可以把该变量指定为一个常量。

1、常量必须在声明时对其初始化。指定了其值后就不能再改写了。

2、常量的值必须能在编译时用于计算,因此不能从一个变量中提取的值来初始化常量。如果需要这样做应使用只读字段。

3、常量总是静态的。但注意不必(实际上,是不允许)在常量声明中包含修饰符static。

四、预定义数据类型。

一、值类型和引用类型

区别是值类型直接存储其值,而引用类型存储其值的引用。这两种类型存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上。

复制引用修改会变,值则不会。

血 是值类
型,这表示下面的语句会在 内 存的两个地方存储值 ⒛:
// i and j are both of type int
i=20;

j=i
`
但考虑下面的 代码。 这段代码假定已 经定义了 一个类 Vector,Vector是 一个引用类型,它有一个int类型的成员变量value

Vector x,y;

x=new Vector();

x.value=30;

y=x;

console.writeline(y.value);

y.value=50;

console.WriteLine(x.value)
要理 解的 重要一点 是在 执行这段代码后,只 有一个 Vector对 象。 x和 y都 指向 包含该对象的内 存
位置。 因 为x和 y是 引 用类型的 变量,声 明 这两个变量只保留了 一 个引 用 一而 不会实例化给定 类型
的 对象。 两种青 况下都不会真正创建对象。 要创建对象,就必须使 用 new关 键字,如上所示。因 为x
和y引 用同一个 对象,所 以 对 x的 修改 会影响y,反 之亦然。因 此上面的 代码会显示 30和 50。

如果变量是一个引用,就可以把其值设置为null,表示不引用任何对象

如果要把自己的类型定义为值类型就应把它声明为一个结构

bool,long都是值类型,如果声明一个bool变量,并给它赋予另一个布尔变量的值,在内存中就会有两个bool值,修改第一个,第二个也不会改变

y=null;

二、cts类型

C#认可的基本预定义类型并没有内置于C#中,而是内置于framework中。在C#中声明一个int类型的数据,声明其实是.net结构system.int32的一个实例。

这表示在语法上,可以把所有的基本数据类型看做是支持某些方法的类。例如把int转换为string  tostring()。

2、string类型是引用类型分配在堆上而不是栈上,当把一个字符串赋给另一个字符串时,会得到对内存中同一个字符串的两个引用,string与其他引用类型有区别

字符串是不可改变的,修改一个字符串就会创建一个全新的对象,而另一个字符串不发生任何变化

 1 using System
 2 class StingExample
 3 {
 4      public static int Main()
 5         {
 6             string s1 = "a string";
 7             string s2 = s1;
 8             Console.WriteLine("s1 is "+s1);
 9             Console.WriteLine("s2 is " +s2);
10             s1 = "another string";
11             Console.WriteLine("s1 is now " + s1);
12             Console.WriteLine("s2 is now " + s2);
13             Console.ReadLine();
14             return 0;
15         }     
16 }

输出结果为:a string

a string

another string

a string

运算重载的原因

2.4流控制

  case值必须是常量表达式,不允许使用变量

在语法上把枚举当成结构是不会造成性能损失,一旦代码编译好枚举就会成为基本类型与int ,float等类似

 1 public enum TimeOfDay
 2         { 
 3             Moring=0,
 4             Afternoon=1,
 5             Evening=2
 6         }
 7         public static int Main()
 8         {
 9             TimeOfDay time = TimeOfDay.Afternoon;
10             Console.WriteLine(time);
11             Console.ReadLine();
12             return 0;
13         }

Afternoon

TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay), "afternoon", true);
            Console.WriteLine((int)time2);

从字符串中获取枚举值,Enum.Parse返回一个对象引用,我们需要把字符串显示转换为需要的枚举类型(这是一个拆箱的例子)返回1

public enum TimeOfDay
        { 
            Moring=0,
            Afternoon=1,
            Evening=2
        }
        public static int Main()
        {
            TimeOfDay time = TimeOfDay.Afternoon;
            Console.WriteLine((int)time);
            TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay), "afternoon", true);
            Console.WriteLine(time2);
            Console.ReadLine();
            return 0;
        }

这个例子输出的结果为1,Afternoon

public enum TimeOfDay
        { 
            Moring=0,
            Afternoon=1,
            Evening=2
        }
        public static int Main()
        {
            TimeOfDay time = TimeOfDay.Afternoon;
            Console.WriteLine(time);
            int time2 = (int)Enum.Parse(typeof(TimeOfDay), "afternoon", true);
            Console.WriteLine(time2);
            Console.ReadLine();
            return 0;
        }

结果为afternoon,1

using System;
using Introduction = Wrox.ProCsharp.Basics;
class Test
{
    public static int Main()
    {
        Introduction::NamespaceExample NsEx = new Wrox.ProCsharp.Basics.NamespaceExample();
        Console.WriteLine(NsEx);
        Console.ReadLine();
        return 0;
    }
}
namespace Wrox.ProCsharp.Basics
{
    class NamespaceExample
    {
        public string GetNamespace()
        {
            return this.GetType().Namespace;
        }
    }
}
View Code

名称空间别名的修饰符是“::”

xml文档

  可以把xml文档从代码中提取出来

2.11预处理指令

posted on 2011-12-04 06:48  快狗慢猪  阅读(175)  评论(0)    收藏  举报