首页 > 编程语言 >C# 构造函数 (初始化成员变量的角色)

C# 构造函数 (初始化成员变量的角色)

时间:2024-04-05 15:44:56浏览次数:29  
标签:初始化 Console string C# Being WriteLine public 构造函数

构造函数是一种特殊的方法。 创建对象时会自动调用它。 构造函数不返回值。 构造函数的目的是初始化对象的状态。 构造函数与类具有相同的名称。 构造函数是方法,因此它们也可以重载。

构造函数不能被继承。 它们按继承顺序被调用。 如果我们不为类编写任何构造函数,则 C# 提供一个隐式默认构造函数。 如果提供任何类型的构造函数,则不提供默认值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Program.
using System;

namespace Constructor
{
    class Being
    {
        public Being()
        {
            Console.WriteLine("Being is created");
        }

        public Being(string being)
        {
            Console.WriteLine("Being {0} is created", being);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            new Being();
            new Being("Tom");
        }
    }
}

我们有一个Being类。 此类具有两个构造函数。 第一个不带参数; 第二个采用一个参数。

1
2
3
4
public Being(string being)
{
    Console.WriteLine("Being {0} is created", being);
}

此构造函数采用一个字符串参数。

new Being();

创建Being类的实例。 这次,在创建对象时调用没有参数的构造函数。

1
2
3
$ dotnet run
Being is created
Being Tom is created

这是程序的输出。

在下一个示例中,我们初始化类的数据成员。 变量的初始化是构造函数的典型工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Program.
using System;

namespace Constructor2
{
    class MyFriend
    {
        private DateTime born;
        private string name;

        public MyFriend(string name, DateTime born)
        {
            this.name = name;
            this.born = born;
        }

        public void Info()
        {
            Console.WriteLine("{0} was born on {1}",
                this.name, this.born.ToShortDateString());
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var name = "Lenka";
            var born = new DateTime(1990, 3, 5);

            var friend = new MyFriend(name, born);
            friend.Info();
        }
    }
}

我们有一个带有数据成员和方法的MyFriend类。

1
2
private DateTime born;
private string name;

类定义中有两个私有变量。

1
2
3
4
5
public MyFriend(string name, DateTime born)
{
    this.name = name;
    this.born = born;
}

在构造函数中,我们启动两个数据成员。 this变量是用于引用对象变量的处理程序。

1
2
var friend = new MyFriend(name, born);
friend.Info();

我们创建带有两个参数的MyFriend对象。 然后我们调用对象的Info()方法。

1
2
$ dotnet run
Lenka was born on 3/5/1990

这是输出。

C# 构造函数链接

构造函数链接是类从构造函数调用另一个构造函数的能力。 要从同一类调用另一个构造函数,我们使用this关键字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Program.
using System;

namespace ConstructorChaining
{
    class Circle
    {
        public Circle(int radius)
        {
            Console.WriteLine("Circle, r={0} is created", radius);
        }

        public Circle() : this(1)
        {

        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            new Circle(5);
            new Circle();
        }
    }
}

我们有一个Circle类。 该类具有两个构造函数。 一种采用一个参数,一种不采用任何参数。

1
2
3
4
public Circle(int radius)
{
    Console.WriteLine("Circle, r={0} is created", radius);
}

此构造函数采用一个参数-radius

1
2
3
4
public Circle() : this(1)
{

}

这是没有参数的构造函数。 它只是简单地调用另一个构造函数,并为其提供默认半径 1。

1
2
3
$ dotnet run
Circle, r=5 is created
Circle, r=1 is created

C# ToString方法

每个对象都有一个ToString()方法。 它返回人类可读的对象表示形式。 默认实现返回Object类型的标准名称。 请注意,当我们使用对象作为参数调用Console.WriteLine()方法时,将调用ToString()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Program.
using System;

namespace ToStringMethod
{
    class Being
    {
        public override string ToString()
        {
            return "This is Being class";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var b = new Being();
            var o = new Object();

            Console.WriteLine(o.ToString());
            Console.WriteLine(b.ToString());
            Console.WriteLine(b);
        }
    }
}

我们有一个Being类,其中我们重写了ToString()方法的默认实现。

1
2
3
4
public override string ToString()
{
    return "This is Being class";
}

创建的每个类都从基object继承。 ToString()方法属于此对象类。 我们使用override关键字来通知我们正在覆盖方法。

1
2
var b = new Being();
var o = new Object();

我们创建一个自定义对象和一个内置对象。

1
2
Console.WriteLine(o.ToString());
Console.WriteLine(b.ToString());

我们在这两个对象上调用ToString()方法。

Console.WriteLine(b);

正如我们之前指定的,将对象作为Console.WriteLine()的参数将调用其ToString()方法。 这次,我们隐式调用了该方法。

1
2
3
4
$ dotnet run
System.Object
This is Being class
This is Being class

这是我们运行示例时得到的。

C# 对象初始化器

对象初始化程序让我们在创建时将值分配给对象的任何可访问字段或属性,而无需调用构造函数。 属性或字段在{}括号内分配。 另外,我们可以为构造函数指定参数,也可以省略参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Program.
using System;

namespace ObjectInitializers
{
    class User
    {
        public User() {}

        public string Name { set; get; }
        public string Occupation { set; get; }

        public override string ToString()
        {
            return $"{Name} is a {Occupation}";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var u = new User { Name = "John Doe", Occupation = "gardener" };
            Console.WriteLine(u);
        }
    }
}

在示例中,我们使用对象初始化程序语法创建一个新用户。

public User() {}

我们定义一个空的构造函数。

1
2
public string Name { set; get; }
public string Occupation { set; get; }

我们有两个属性:NameOccupation

var u = new User { Name = "John Doe", Occupation = "gardener" };

我们将值分配给{}括号中的属性。

1
2
$ dotnet run
John Doe is a gardener

C# 类常量

C# 可以创建类常量。 这些常量不属于具体对象。 他们属于阶级。 按照约定,常量用大写字母表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Program.
using System;

namespace ClassConstants
{
    class Math
    {
        public const double PI = 3.14159265359;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Math.PI);
        }
    }
}

我们有一个带有PI常量的Math类。

public const double PI = 3.14159265359;

const关键字用于定义常数。 public关键字使它可以在类的主体之外访问。

1
2
$ dotnet run
3.14159265359

运行示例,我们看到此输出。

标签:初始化,Console,string,C#,Being,WriteLine,public,构造函数
From: https://www.cnblogs.com/lvbjj/p/18115809

相关文章

  • C# 继承
    继承是使用已经定义的类形成新类的方法。新形成的类称为派生的类,我们派生的类称为基类。继承的重要好处是代码重用和降低程序的复杂性。派生类(后代)将覆盖或扩展基类(祖先)的功能。1234567891011121314151617181920212223242526272829Program.usin......
  • C# 抽象类和方法
    抽象类无法实例化。如果一个类至少包含一个抽象方法,则也必须将其声明为抽象方法。抽象方法无法实现;他们只是声明方法的签名。当我们从抽象类继承时,所有抽象方法都必须由派生类实现。此外,必须以较少受限制的可见性声明这些方法。与接口不同,抽象类可能具有完全实现的方法,并且......
  • AC不了的看过来!ASCLL码(一本通练40.3)
    题目描述相信大家一定都知道大名鼎鼎的ASCII码,这次给你的任务是输入数字(表示ASCII码),输出相对应的字符信息。输入第一行为一个整数 T(1≤T≤1000)。接下来包括 T 个正整数,由空白符分割。(空白符包括空格、换行、制表符)这些整数不会小于32。输出在一行内输出相应的字......
  • P4329 [COCI2006-2007#1] Bond
    原题链接题解二进制dpetc:令\(dp[00110]\)代表前两个任务选23两个人出战的最大成功率则\(dp[00110]=max(dp[00010]+a[3][2],dp[00100]+a[2][3])\)code#include<bits/stdc++.h>usingnamespacestd;doublea[25][25]={0};doubledp[1<<22]={0};intcal(intnow){......
  • Qt 处理excel
    处理Excel文件在Qt中通常涉及到使用第三方库,因为Qt本身并不直接支持Excel文件的读写。下面我将提供一个使用QAxObject(ActiveX封装)来操作Excel的基本代码示例。请注意,这个方法要求你的系统上安装有MicrosoftExcel。首先,确保你的Qt项目配置中包含了ActiveQt模块。在你的.pro文......
  • lessc assets/index.less assets/index.css这个命令的作用是什么?
    lesscassets/index.lessassets/index.css这个命令的作用是什么?lesscassets/index.lessassets/index.css这条命令是用来编译Less样式表文件的。具体来说,它的作用如下:lessc:这是Less编译器的命令行工具(lesscstandsforlesscompiler)。它是Less预处理器的一个组成......
  • Yann Lecun-纽约大学-深度学习(PyTorch)
    课程介绍    本课程涉及深度学习和表示学习的最新技术,重点是有监督和无监督的深度学习,嵌入方法,度量学习,卷积和递归网络,并应用于计算机视觉,自然语言理解和语音识别。前提条件包括:DS-GA1001数据科学入门或研究生水平的机器学习课程。     免费获取:YannLecun-纽约......
  • 一文了解PCIe 6.0的基础和测试
    2022年PCI-SIG组织宣布PCIe6.0规范标准v1.0版本正式发布,宣告完工。延续了惯例,带宽速度继续增倍,x16下可达128GB/s(单向),由于PCIe技术允许数据全双工双向流动,因此双向总吞吐量就是256GB/s。• Definitions/MetricstoHelpFrameServerDesignChallenges•Disaggregatio......
  • OpenAI劲敌出手!Claude 3正式发布,全面超越GPT-4。Claude3模型特点和使用教程分享
    已有GPT官方账号不会升级GPT4请参考:【国内如何用gpt4?如何升级gpt4?保姆级教程】一、Claude震撼发布焦点分析1.Claude震撼发布北京时间2024年3月4日晚间,Anthropic,毫无预警地发布了最新一代大模型Claude3,距离上一代的Claude2发布,仅相隔8个月。Claude发布了最新的大模型Cla......
  • 举例:配置动态LACP模式Eth-Trunk
    举例:配置动态LACP模式Eth-Trunk组网需求如图3-13所示,服务器A与DeviceA建立动态LACP模式链路聚合,两端设备将通过动态LACP协议报文进行链路聚合协商。图3-13 动态LACP模式Eth-Trunk组网图本例中interface1、interface2、interface3分别代表10GE1/0/1、10GE1/0/2、10GE1/0/......