• 技术文章 >后端开发 >C#.Net教程

    C#基础知识整理:基础知识(3) 类的构造

    黄舟黄舟2017-02-10 15:38:45原创711
    我们定义了YSchool,YTeacher类,实例化对象时:

                YSchool shool1 = new YSchool();
    
                shool1.ID = 1;
    
                shool1.Name = "清华附中";
    
                YSchool school2 = new YSchool();
    
                school2.ID = 2;
    
                school2.Name = "北师大附中";

    这样写对不对呢,其实在逻辑上是不正确的,因为实例化对象时,它的属性应该是和实例化一起就有的,而不是后来再加属性。在程序中表现就是,属性要有初值。
    所以,在类中就要有这样一个方法,无返回类型,方法名和类名相同,有参数类表或者没有参数列表。它就是构造方法,俗称“构造器”或“构造函数”。一个类中可以有一个或多个构造函数,当然有时你没写构造函数,这并不代表这个类就没有构造函数,它依然有一个默认的构造函数的。如果使多个构造函数的话,它们各自的参数列表必须不同。
    下面以YSchool为例完善这个类。

      /// <summary>
        /// YSchool类的id和name是它的固有属性,它的值应该是确定的。
        /// 实例化的同时对属性赋初值,用到构造函数。
        /// </summary>
        public class YSchool
        {
            private int id = 0;
    
            private string name = string.Empty;
    
            public int ID
            {
                get
                {
                    return this.id;
                }
            }
    
            public string Name
            {
                get
                {
                    return name;
                }
            }
            /// <summary>
            /// 没有参数的构造器称之为“默认构造器”;如果没有写一个构造器,那么
            ///系统也会提供一个默认的构造器,所以说类至少有一个构造器;
            ///当然,如果系统提供的默认构造函数,则属性初值为声明时赋的初值,如果声明
            ///未赋初值,则是“类型默认值”,比如0或者null。
            /// </summary>
            public YSchool()
            {
                this.id = 0;
    
                this.name = @"清华附中";
            }
            /// <summary>
            /// 带有参数列表的构造函数,
            /// 属性的值就是传入的列表的值。
            /// </summary>
            /// <param name="id"></param>
            /// <param name="name"></param>
            public  YSchool(int id, string name)
            {
                this.id = id;
    
                this.name = name;
            }
            public  YSchool(int id)
            {
                this.id = id;
    
                this.name = @"陕科大附中";
            }
        }
       class Program
        {
            static void Main(string[] args)
            {
                YSchool shool1 = new YSchool();
    
                YSchool school2 = new YSchool(1, @"西工大附中");
    
                YSchool school3 = new YSchool(2);
    
                Console.ReadKey();
            }
        }

    上面还修改了id和name的get/set属性,都改为只有get,因为这些属性值都是固有属性,实例化之后再赋值也就不符合逻辑了。也就是这些属性是只读的。

    代码中提到了默认值,这里简单说一下。在声明字段的时候,可以用赋值运算符“=”给字段直接加一个值,比如

        string name = string.Empty;

    这个不是给变量赋值,默认值只是一种形式,真正给变量赋值还是在构造函数中。一般规范的代码都要求声明变量时要赋初值的。如果生命时没有赋值的字段,都会由编译器增加一句赋值代码,将该字段赋值为设定的默认值。其实,无论我们是否给字段增加了默认值,字段都具备默认值的,只不过如果我们没有人为增加默认值,字段的默认值将是0或null。
    这里还有一点要注意,前面提到过系统默认的构造函数,但是当定义了构造函数后,系统默认构造函数就不存在了。因此如果某些情况下,既要用到默认构造函数和带参数的构造函数,就要手动定义默认构造函数了。比如,

            public YSchool()
            {
    
            }

    或者

            public YSchool()
            {
                this.id = 0;
    
                this.name = @"尚进";
            }

    综上所述实例化类的规范表达式应该是:类名 实例名 = new 类名(构造函数参数列表);

    以上就是C#基础知识整理:基础知识(3) 类的构造的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:C#基础知识整理:基础知识(2) 类 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中源文件编译后生成什么文件• C#中GDI+编程10个基本技巧二• 应用绝对路径与相对路径• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误
    1/1

    PHP中文网