• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

c# 搞代码 4年前 (2022-01-09) 42次浏览 已收录 0个评论

我们定义了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;    <i>本文来源gaodai$ma#com搞$$代**码网</i>        }        }        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) 类的构造的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#基础知识整理:基础知识(3) 类的构造

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址