首页 后端开发 C#.Net教程 C#基础知识整理:基础知识(3) 类的构造

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

Feb 10, 2017 pm 03:38 PM

我们定义了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中文网(www.php.cn)!

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用 C# 的活动目录 使用 C# 的活动目录 Sep 03, 2024 pm 03:33 PM

使用 C# 的 Active Directory 指南。在这里,我们讨论 Active Directory 在 C# 中的介绍和工作原理以及语法和示例。

C# 中的访问修饰符 C# 中的访问修饰符 Sep 03, 2024 pm 03:24 PM

C# 中的访问修饰符指南。我们已经讨论了 C# 中访问修饰符的简介类型以及示例和输出。

C# 中的随机数生成器 C# 中的随机数生成器 Sep 03, 2024 pm 03:34 PM

C# 随机数生成器指南。在这里,我们讨论随机数生成器的工作原理、伪随机数和安全数的概念。

C# 数据网格视图 C# 数据网格视图 Sep 03, 2024 pm 03:32 PM

C# 数据网格视图指南。在这里,我们讨论如何从 SQL 数据库或 Excel 文件加载和导出数据网格视图的示例。

C# 中的模式 C# 中的模式 Sep 03, 2024 pm 03:33 PM

C# 模式指南。在这里,我们讨论 C# 中模式的介绍和前 3 种类型,以及其示例和代码实现。

C# 序列化 C# 序列化 Sep 03, 2024 pm 03:30 PM

C# 序列化指南。这里我们分别讨论C#序列化对象的介绍、步骤、工作原理和示例。

C# 字符串编写器 C# 字符串编写器 Sep 03, 2024 pm 03:23 PM

C# StringWriter 指南。在这里,我们讨论 C# StringWriter 类的简要概述及其与不同示例和代码的工作。

C# 中的 Web 服务 C# 中的 Web 服务 Sep 03, 2024 pm 03:32 PM

C# Web 服务指南。在这里,我们讨论 C# 中的 Web 服务简介,包括技术使用、限制和示例。

See all articles