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

我们定义了yschool,yteacher类,实例化对象时:

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

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

  ///     /// YSchool类的id和name是它的固有属性,它的值应该是确定的。    /// 实例化的同时对属性赋初值,用到构造函数。    ///     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;            }        }        ///         /// 没有参数的构造器称之为“默认构造器”;如果没有写一个构造器,那么        ///系统也会提供一个默认的构造器,所以说类至少有一个构造器;        ///当然,如果系统提供的默认构造函数,则属性初值为声明时赋的初值,如果声明        ///未赋初值,则是“类型默认值”,比如0或者null。        ///         public YSchool()        {            this.id = 0;            this.name = @"清华附中";        }        ///         /// 带有参数列表的构造函数,        /// 属性的值就是传入的列表的值。        ///         ///         ///         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)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:20:18
下一篇 2025年12月16日 03:13:12

相关推荐

  • C#基础知识整理:基础知识(4) 继承

        前面提到过,面向对象的三大特性:封装性、继承性和多态性。封装在前面类的定义里也了解的差不多透彻了,现在看看继承的特性。继承实际是一个类对另一个类的扩展,后者称之为基类,前者称之为子类。继承就是子类拥有基类的一切属性和方法,子类还可以增加属性和方法。但是子类不能去掉父类的属性和方法。    当…

    2025年12月17日
    000
  • C# 快速排序

    c# 快速排序 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Sort{ class QuickSorter { private static int[] myA…

    2025年12月17日
    000
  • C# 归并排序

     c# 归并排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class MergeSorter { /// /// 归并排序之归:归并排…

    2025年12月17日
    000
  • C# 插入排序

    c#  ,插入排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class InsertSorter { public static in…

    2025年12月17日
    000
  • C# 堆排序

    c#  堆排序 using System; using System.Collections; namespace Sort { public class HeapSorter { public static int[] Sort(int[] sortArray) { BuildMaxHeap(so…

    好文分享 2025年12月17日
    000
  • 鸡尾酒排序(双冒泡排序、搅拌排序或涟漪排序)

     鸡尾酒排序(双冒泡排序、搅拌排序或涟漪排序) using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Sort { class CockTailSorter { p…

    好文分享 2025年12月17日
    000
  • C# 冒泡排序

     c# 冒泡排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class BubbleSorter { public static int…

    好文分享 2025年12月17日
    000
  • 排序算法测试程序入口

     排序算法测试程序入口 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;using System.Diagnostics;namesp…

    好文分享 2025年12月17日
    000
  • C#基础知识整理:.NET知识

    1、什么是.NET Framework    所谓.NET FrameWork就是一个平台,它的目的是为了跨操作系统编程。它包含了很多模块,例如有windows应用程序构件,Web开发的模块等,而不同的操作系统根据自己的特性,支持其中部分模块。NET框架是采用虚拟机运行的编程平台,以通用语言运行时(…

    好文分享 2025年12月17日
    000
  • C#数据类型

        c#的数据类型可以分为3类:数值类型,引用类型,指针类型。指针类型仅在不安全代码中使用。    值类型包括简单类型(如字符型,浮点型和整数型等),集合类型和结构型。引用类型包括类类型,接口类型,代表类型和数组类型。     值类型和引用类型的不同之处是值类型的变量值直接包含数据,而引用类型的…

    好文分享 2025年12月17日
    000
  • C#基础知识整理:C#基础(1)

    c#基本结构 using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1{ class MyFirstClass { static void Main(string[] a…

    好文分享 2025年12月17日
    000
  • C#的隐式和显示类型转换

        关于隐式转换和显示转换,每种语言都有的,c#中当然也不例外。一般常用到的场合,一种是写运算表达式的时候,要保持整体的数据类型一致和计算准确,比如有一个变量a是int型,但是它是通过加减乘除得到的,那么在运算中就要考虑用显示转换,除的运算需要转换成float或double,再把结果强制转换为i…

    好文分享 2025年12月17日
    000
  • C#基础知识整理:C#类和结构(1)

    1、结构功能特性? 实现代码?结构用struct关键字定义的,与类类似,但有本质区别。结构实质是一个值类型,它不需要对分配的。结构的特性:(1)、结构作为参数传递时,是值传递。(2)、结构的构造函数必须带参数的。(3)、结构实例化可以不用new的。(4)、结构不能继承,但是可以实现接口。(5)、结构…

    好文分享 2025年12月17日
    000
  • C#基础知识整理:C#类和结构(2)

      1、什么是构造函数? 有哪些构造函数? 各个构造函数的定义、实现方法、注意事项?所谓构造函数,就是一个方法,这个方法可以初始化对象,即运行完这个函数后,内存总开辟了一块该类的对象的空间。有三种:正常的构造函数,也就是实例化构造函数;私有构造函数;静态构造函数。实例化构造器: public cla…

    2025年12月17日
    000
  • C#中使用gRPC

    由于有nuget,使得c#在配置项目时非常简单。 1. 在NuGet中添加ProtocolBuffer和gRPC引用 protocol buffer 3.0版本,在NuGet插件界面选择Include Prerelease,查找google protocol buffer。如果不选择include …

    好文分享 2025年12月17日
    000
  • C#理解泛型

    简介 Visual C# 2.0 的一个最受期待的(或许也是最让人畏惧)的一个特性就是对于泛型的支持。这篇文章将告诉你泛型用来解决什么样的问题,以及如何使用它们来提高你的代码质量,还有你不必恐惧泛型的原因。 泛型是什么? 很多人觉得泛型很难理解。我相信这是因为他们通常在了解泛型是用来解决什么问题之前…

    好文分享 2025年12月17日
    000
  • C#基础之yield与Singleton

    1.实例解析yiled的作用 最近参加java笔试题第一次见到yield这个关键字,既然遇见了那肯定要掌握,下面是c#中关于yield关键字的总结。yield这个关键字作用于迭代器块中,其最本质的功能有2个:一是“依次”向枚举对象提供值,二是发出迭代结束信号。这两个功能对应的语句分别是yield r…

    2025年12月17日
    000
  • C# 继承

    继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基…

    好文分享 2025年12月17日
    000
  • C# 多线程经典示例 吃苹果

    本文主要讲述了多线程开发中经典示例,通过本示例,可以加深对多线程的理解。 示例概述:   下面用一个模拟吃苹果的实例,说明C#中多线程的实现方法。要求开发一个程序实现如下情况:一个家庭有三个孩子,爸爸妈妈不断削苹果往盘子里面放,老大、老二、老三不断从盘子里面取苹果吃。盘子的大小有限,最多只能放5个苹…

    2025年12月17日
    000
  • C#希尔排序

    c#希尔排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class ShellSorter { public static int[] …

    2025年12月17日 好文分享
    000

发表回复

登录后才能评论
关注微信