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不能声明默认构造方法(即无参数构造方法)。
2、在结构自定义构造方法内,所有实例字段必须初始化。静态字段具有默认值并且静态字段可以赋予初始值。
3、编译器为结构提供的默认构造方法被系统自动调用后,会初始化所有实例字段,初始值为他们的默认值。即 0 null false等。
4、结构中所有的实例字段不能包含初始化值。例如 private int id=0;//错误。实例初始化必须放到构造方法中(默认构造方法由系统调用,自定义构造方法由用户调用)。个人认为,之所以结构这样规定,是因为结构是类似于int,boolean、char等的简单类型,防止使用未初始化的变量,如果结构允许存在别初始化的实例字段,将导致使用了未初始化结构变量的错误。
使用结构:
结构复制:值
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.
相关文章推荐
- C#学习第五天 方法和方法的高级参数
- c#学习第五天 枚举和结构体
- C#学习记录之第五天
- 马牛的C#学习(第五天)-定义类成员
- 思胜C#学习第五天
- C# 学习笔记 -- 第五天 程序结构
- 从C#到Python —— 谈谈我学习Python一周来的体会
- c#学习第四天
- C#学习小结:接口的作用
- (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员
- 编写高质量C#代码学习笔记(6)
- C#设计模式学习笔记-单例模式
- 通过实例学习C#开发中的泛型
- 黑马程序员之C#学习笔记:用户实例连接非内嵌式数据库
- EXTJS学习系列提高篇:第一篇(转载)作者殷良胜,用EXT2.2+vs.2008.net+C#动态生成GridPanel
- 2012-04-06 C#基础学习笔记(5)
- C#学习:综合练习聊天机器人第一版
- C#学习笔记三:数据并行
- 有关c#的学习笔记整理与心得
- C#学习笔记之——写一个能算出今天是今年第几天的方法