接口、值类型与引用类型

 

复习... 1

  01. 静态和非静态:... 1

  02  工厂... 2

本堂内容... 3

  一、接口... 3

    01 接口的定义:... 3

    02 接口的存在就是为了实现多态... 4

    03  接口的多继承性... 5

  二、接口与抽象类... 5

  三、面试题:... 6

  四、值类型和引用类型(重点)... 6

  五、装箱和拆箱... 7

  六、引用传递和值传递... 8

  七、异常处理... 9

 

 

 

 

 

 

 

=============================================================

复习:

      01. 静态和非静态:

                   定义:

                            有static修饰的为静态 静态类,静态方法,静态字段 等

                   调用:

                            静态为共有成员,都可以访问,

                            非静态为私有的实例成员

                            class TextClass

                            {

                                     public int index;

                                     public static int num;

                                     //数字初始赋值为0, 字符\0,字符串 null bool false

                                     public TextClass(int i)

                                     {

                                               index=i;

                                     }

                                     //得到静态的num

                                     public int getNum()

                                     {

                                               return num;

                                     }

                                     //修改静态字段

                                     public void setNum(int i)

                                     {

                                               num=i;

                                     }

                            }

                            main 函数中写入:

                            TextClass t1 = new TextClass(1);

                            TextClass t2 = new TextClass(2);

                            Console.WriteLine("t1.index={0},t2.index={1}",t1.index,t2.index);

                            t1.setNum(100);

                            Console.WriteLine("t1={0},t2={1}",t1.getnum,t2.getnum);

                            得到 t1=100,t2=100;

           02  工厂

                            工厂的特征就是根据需求生产(对象)

                                     1. 生产的这个东西干嘛用的

                                     2. 由于生产的东西不同需要考虑统一调用的问题

                                   

                            语法:

                            class Base

                            {

                            }

                            class Sub:Base

                            {

                            }

                            static class Factory

                                     {

                                               public static Base(返回值) ShengChan(string oper(条件))

                                               {

                                                        switch(oper)

                                                        {

                                                        case"+":return new Sub();

                                                        default:return new Sub();

                                                        }

                                               }

                                     }

===================================================================

本堂内容

      一、接口

      01 接口的定义:

                   interface  接口名

                   {

                            接口成员:

                                     只能定义抽象的成员

                                     1.方法

                                               只定义抽象方法

                                               返回类型 方法名(参数列表);

                                               例:string Func(int num);

                                     2.属性

                                               属性的本质就是方法,

                                               返回值 属性名 {选择器}

                                               接口中属性具有 只读属性和只写属性之分

                                               只读:

                                               int Num1

                                               {

                                                        get;

                                               }

                                               只写:

                                               int Num2

                                               {

                                                        set;

                                               }

                                     3.索引

                                     4.事件声明

                   }

                            方法:

                   class MyTestClass:接口名

                   {

                            和抽象类的使用一样,必须要实现这个接口中的方法

                            与正常方法一样的写

                            public string Func(int num)

                            {

                                     return DateTime.Now.Year;

                            }

                   }

                   如果这个类为抽象类,则方法可以写为抽象方法

                   abstract class MyTestClass:接口名

                   {

                 

                            也可:写为抽象方法

                            public abstract string Func(int num);

                   }

                            接口的属性:

                            interface IProperity

                            {

                          

                                     int num;

                                     public int Num

                                     {      

                                               get{ return num;}

                                               set{num = value;}

                                     }

                                     抽象属性:

                                     abstract int Num

                                     {

                                               get;

                                               set;

                                     }

                            }

                            使用:

                            class MyTestClass:IProperity

                            {

                                     public int Num

                                     {

                                               get{ return num;}

                                               set{num = value;}

                                     }

                            }

                          

-------------------------------------------------------------

      02 接口的存在就是为了实现多态

                   写方法是为了被重写的

                   写属性是为了被继承的

      03  接口的多继承性

                   显示实现接口的语法:

                            void 接口名.方法名(参数)

                            {

                                     方法体

                            }

                            可以知道显示实现接口方法没有访问修饰符

                            如何调用?

                            显示实现接口只能通过接口进行调用

                          

                   interface IF1

                   {

                            void Function();

                   }

                   interface IF2

                   {

                            void Function();

                   }

                   class MyTest:IF1,IF2

                   {

                            void IF1.Function()

                            {

                                   

                            }

                   }

                   调用:

                   MyTest mytest=new MyTest();

                   IF1 f1 = mytest;

                   f1.Function();

                   IF2 f2 = mytest;

                   f2.Function();

------------------------------------------------------------------------

      二、接口与抽象类

                   编程选择的级别:面向抽象编程 使用抽象数据,不使用具体数据

                   接口>抽象类>父类>子类

                   避免定义体积庞大和功能齐全的接口

                   ->单一性

                   ->接口组合使用

-------------------------------------------------------------------------

      三、面试题:

         1. 如何使用virtual和override?

                   Person per = new Student();

                   per.SayHI()调用的子类重写的SayHi方法

         2. 如何使用abstract和override?

         3. “方法重载overload” 、 “方法重写override"、 "隐藏new"是同一个概念吗?

                   方法重载 是 函数名一样 参数不一样

         4.抽象类和接口的区别?见备注1.

                   抽象类适用于同一系列,并且有需要继承的成员。

                   接口适用于不同系列的类具有相同的动作。

                   对于不是相同的系列,但具有相同的行为,这个就考虑使用接口。

==========================================================================

      四、值类型和引用类型(重点)

       

       

       

         结构(struct)和类(class)的区别

                   结构独享数据

                   类共享数据

                 

                   类类型是引用类型

                   结构类型是值类型

                   应用类型:

                    class MYpoint

                    {}

                    main  函数中:

                    Mypoint m1=new Mypoint ();

                    m1.x=100;

                    m1.y=200;

                    Mypoint m2=m1;

                    引用类型为"复制快捷方式"

                    相当于 m1 和 m2 为指向同一文件的快捷方式

                    改变其中之一的数据 将使两者的数据都改变

                    即 m1 和m2 指向同一内存;

                    若 m1.x=10;      m2.y=20;

                    则 m2.x=10;      m1.y=20;

                    struct MYpoint

                    {}

                    main  函数中:

                    Mypoint m1=new Mypoint ();

                    m1.x=100;

                    m1.y=200;

                    Mypoint m2=m1;

                    值类型为"复制文件"

                    m1 m2 为不相关的两个独立文件,指向不同的内存,两者的数据不相影响,

                    即 m2 的 属性 和 m1 的属性各自独立

-------------------------------------------------------------------

      五、装箱和拆箱

         装箱的目的就是为了统一调用

         装箱: int num = 10;

                            object o = num;

         拆箱: int num1 = (int)o;

         得到: num1 = 10;

       

         装箱: int num = 10;

                            object o = num;

                            num = 100;

         拆箱: int num1 = (int)o;

         得到: num1 = 10;

         即:再次赋值不影响装箱的数据;

-------------------------------------------------------------

      六、引用传递和值传递

         ref   out

         main 函数中:

         int num1 = 10;

         int num2 = 5;

         Func(ref num1,ref num2);

         ConSole.WriteLine("num1 = {0}, num2 = {1}",num1,num2);

         Func1(out num1,out num2);

         ConSole.WriteLine("num1 = {0}, num2 = {1}",num1,num2);

       

         console.readkey();

       

         public static void Func(ref int n1, ref int n2)

         {

                   int temp = n1;

                   n1 = n2;

                   n2 = temp;

         }

         public static void Func1(out int n1,out int n2)

         {

                   n1 = 10000;

                   n2 = -1234;

         }

         该例中num1 和 num2  为值类型 所以 用 ref 或 out

         ref 和 out 的区别

         ref 在使用前要赋值

         out 在使用时要赋值

=============================================================

         字符串转换为数字类型:

         int.Parse:

                   string str="123";

                   int num = int.parse(str);

         int.TryParse:

                   int num;

                   if(int.TryParse(str,out num))

                   {

                            console.writeline(num+1);

                   }

                   else

                   {

                            console.writeline("不成功");

                   }

         Convert.Toint32

 

         雷同有:

         double.Parse   double.Tryparse

         char.Parse     char.TryParse

-----------------------------------------------------------------

      七、异常处理

         try - catch

         try - catch - finally

         try - finally (*)

         int num;

         ConSole.WriteLIne("请输入一个数字");

         string str = ConSole.ReadLine();

         try

         {

                   num = int.Parse(str);

                   ConSole.WriteLine(num + 1);

         }

         catch(Exception ex)

         {

                   ConSole.WriteLine(ex.Message);

         }

         finally

         {

                   //无论如何在捕捉异常结构时都会执行这里的代码

                   ConSole.WriteLine("销毁");

         }

       

         ConSole.ReadKey();

         当出现异常时,try中的所有代码都将停在出现异常的地方,其后代码不再执行

         直接调至 catch 进行处理

         无论 try 和 catch 中什么语句,即使是 break 或 return 都不影响继续执行 finally 里的语句, 但 finally 里不能有 return ;

       

       

posted on 2012-06-28 22:08  轻雨  阅读(136)  评论(0)    收藏  举报