C#第三章对象和类型

    技术2022-05-20  31

    第三章       对象和类型

    1.  类和结构的区别:

    a.  最大的区别是存储位置不一样:类是引用类型,存放在堆上,结构式值类型,存放在堆栈上。所以new运算符与类的工作方式不同,不分配内存,只是调用构造函数,初始化字段

    b.  结构不支持继承

    c.  结构不允许定义无参数构造函数,不能给字段提供初始值

    2.  类成员

    类中的数据(字段、常量、事件)和函数(方法、属性、构造函数和终结器、运算符以及索引器)称为类的成员

    (1)     ref参数  迫使参数通过引用传送给方法  带入前初始化

    (2)     out输出参数  参数前加out关键字时,传递给该方法的变量可以不初始化

        static void Main(string[] args)

            {

                //ref关键字

                //int[] ints = {10};

                //int i = 10;

                //SomeFunction(ints,ref i);

                //Console.WriteLine(ints[0].ToString()+i.ToString());

     

                //out关键字

                int i;

                SomeFunction2(out i);

                Console.WriteLine(i);

            }

            /// <summary>

            /// ref

            /// </summary>

            /// <param name="ints"></param>

            /// <param name="i"></param>

            static void SomeFunction(int[] ints, ref int i)

            {

                ints[0] = 100;

                i = 100;

            }

            /// <summary>

            /// out

            /// </summary>

            /// <param name="i"></param>

            static void SomeFunction2(out int i)

            {

                i = 100;

            }

    (3)  方法重载   方法中的参数名称、参数类型或参数个数不同

    a.   两个方法不能仅在返回类型上有区别

    b.   两个方法不能仅根据参数是声明为ref还是out来区分

    (4)     构造函数

    C#中默认有一个没有参数没有返回值的构造函数

    把构造函数定义为privateprotected,不相关的类就不能访问

    public class MyNumber

        {

            private int number;

            private MyNumber(int number)

            {

                this.number = number;

            }

    }

    在这个例子中,我们没有为MyNumber定义任何公共或受保护的构造函数。所以MyNumber类不能使用new运算符在外部代码中实例化(但可以在MyNumber上编写一个公共静态属性或方法,已进行实例化),适用于以下两种情况:

    类仅用作某些静态成员或属性的容器,因此永远不会实例化

    希望类仅通过调用某个静态成员函数来实例化

    a.静态构造函数    没有访问修饰符,不能带任何参数,一个类只能有一个静态构造函数,显然,静态构造函数只能访问静态成员

    (5)     只读字段

        public class DocumentEditor

        {

            public readonly DateTime CreationDate;

            public DocumentEditor()

            {

                CreationDate = new DateTime(2002,1,1);

            }

    }

    把字段声明为只读类型,表示其值只能在构造函数中设置

    3.  结构与类的区别

    结构是值类型,不是引用类型。他们存储在堆栈中火存储为内联(如果他们是对象的一部分,就会保存在堆中),其生存期的限制与简单的数据类型一致

    结构不支持继承

    结构的构造函数的工作方式有一些区别。尤其是编译器总提供一个无参数的构造函数,这是不允许替换的

    使用结构,可以指定字段如何在内存中布局

    4.  部门类(partial

    Partial关键字允许把类、结构或接口放在多个文件中。如果没有类的源代码时,可以使用部分类给其添加内容

    //BigClassPart1.cs

    partial  class TheBigClass

        {

            public void MethodOne()

            {

                Console.WriteLine("one");

            }

    }

    //BigClassPart2.cs

        partial  class TheBigClass

        {

            public void MethodTwo()

            {

                Console.WriteLine("two");

            }

    }

    5.  静态类(static)

    如果一个类只包含静态的方法和属性,该类就可以是静态的。静态类不能创建实例。条用静态类中的方法:类名.方法名


    最新回复(0)