您的位置:首页 > 编程语言 > C#

C#学习第五天

2012-06-18 18:27 155 查看
C#中的 is as

is 可用于任何类型。

例如

int a = 10;

a is Object ==true;

Object o = 10;

o is int ==true;

o = person;

o is int == false;

as 右侧类型必须为引用类型或可空类型。

as操作如果失败,不抛出异常,而是返回null;

结构(struct)栈变量:

结构有如下与类不一样的地方:

1、结构struct不能声明默认构造方法(即无参数构造方法)。

struct Time
{
Time()//错误!结构不能声明默认构造方法
{
}
}


2、在结构自定义构造方法内,所有实例字段必须初始化。静态字段具有默认值并且静态字段可以赋予初始值。

3、编译器为结构提供的默认构造方法被系统自动调用后,会初始化所有实例字段,初始值为他们的默认值。即 0 null false等。

4、结构中所有的实例字段不能包含初始化值。例如 private int id=0;//错误。实例初始化必须放到构造方法中(默认构造方法由系统调用,自定义构造方法由用户调用)。个人认为,之所以结构这样规定,是因为结构是类似于int,boolean、char等的简单类型,防止使用未初始化的变量,如果结构允许存在别初始化的实例字段,将导致使用了未初始化结构变量的错误。

struct Time
{
// public int ID=100; 结构中不能存在实例字段初始值
public const String name = "Time";//常量正常存在,且不能修改
public static int stId ;//结构中static字段可以存在初始值,默认为0 false null
private int hour;
public int miniute;

/*
* 结构不能包含显示的默认构造方法(无参数构造方法)
* 如果不提供结构自定义构造方法,那么编译器自动添加默认构造方法并初始化所有实例字段,这也是结构不能存在实例初始化字段的原因
public Time()
{

}*/

/*
* 在结构自定义构造方法中,所有字段必须初始化(无论字段访问级别如何)
*/
public Time(int hour)
{
this.hour = hour;
miniute=10;
//ID = 001;
}

}


使用结构:

//使用结构
public static  void test()
{
Time time = new Time();//初始化
Console.WriteLine(time.miniute);//打印出0
Time time2;//未初始化
//因为是栈变量,所以声明方式可以和其他栈类型int,boolean等一样
// Console.WriteLine(time2.miniute);//Error。字段未初始化

time2.miniute = 50;
Console.WriteLine(time2.miniute);//ok。字段已赋值

//上面两种结构变量声明方式所产生的值均在栈上。

int a = new int();//初始化
Console.WriteLine(a);//0
int b;//未初始化
// Console.WriteLine(b);error:使用了未赋值的变量
b = 10;
Console.WriteLine(b);//OK

}


结构复制:值

time.miniute = 38;
Time tm = time;//复制值。注意time必须使用构造方法的方式声明
time.miniute = 28;//不会改变tm中栈变量的值
Console.WriteLine(tm.miniute);//打印38.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: