C#学习第五天

 

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.


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章