📜  dart 构造函数 - C# (1)

📅  最后修改于: 2023-12-03 15:14:36.532000             🧑  作者: Mango

Dart 构造函数与 C# 构造函数

在 Dart 和 C# 中,构造函数都是用于初始化新对象的特殊方法。虽然它们的基本概念相似,但这两种语言中的构造函数有着一些不同之处。

Dart 构造函数

Dart 中的构造函数是在类名中声明的特殊方法。在构造函数中,我们可以初始化成员变量并执行其他初始化操作。Dart 中的构造函数有如下几种类型:

  1. 默认构造函数

默认构造函数是在类名后面不跟任何参数列表的构造函数。如果我们没有手动声明任何构造函数,则默认会生成一个无参数的构造函数。默认构造函数可以用下面这种方式来声明:

class Person {
  String name;
  int age;

  Person();
}
  1. 命名构造函数

命名构造函数是指在类中通过指定函数名来实现的构造函数。命名构造函数是为了提供更多的初始化方式。我们可以通过创建不同的命名构造函数来提供不同的初始化函数,以便初始化同一个类的对象。

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  Person.fromName(String name) {
    this.name = name;
  }

  Person.fromAge(int age) {
    this.age = age;
  }
}

在上面的示例中,我们为 Person 类定义了三种不同的构造函数。第一个构造函数是默认构造函数,它需要传入 nameage 参数来初始化成员变量。第二个和第三个构造函数都是命名构造函数,它们都有一个单独的参数用来初始化 nameage 中的一个。

  1. 工厂构造函数

使用工厂构造函数可以拥有更细粒度的控制,可以自定义构造返回的实例。除此之外,还可以利用工厂构造函数创建单例对象。

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  factory Person.fromMap(Map<String, dynamic> map) {
    return Person(
      map['name'],
      map['age'],
    );
  }

  static final Person _singleton = Person('张三', 18);
  factory Person.singleton() => _singleton;
}

在上面的示例中,我们为 Person 类定义了两种工厂构造函数。第一个工厂构造函数是 fromMap,它接受一个 Map<String, dynamic> 类型的参数,并将其中的 nameage 映射到 Person 的属性中。第二个工厂构造函数是 singleton,它返回一个单例对象。

C# 构造函数

C# 中的构造函数也是在类中声明的特殊方法。C# 中的构造函数可以包含许多不同类型的参数,如下所示:

  1. 无参数构造函数

无参数构造函数是默认构造函数,它是一个无参构造函数。如果没有手动声明构造函数,则默认会生成一个无参数的构造函数。

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person() { }
}
  1. 常规构造函数

常规构造函数是最常见的构造函数类型,它可以包含多个参数,并用来初始化对象的成员变量。

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}
  1. 可选参数构造函数

可选参数构造函数可以包含一些有默认值的参数。如果我们不想为这些参数指定值,那么它们将被初始化为默认值。

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }

    public Person(string name, int age, string address = "")
    {
        Name = name;
        Age = age;
        Address = address;
    }
}

在上面的示例中,Address 参数被设置为可选参数,并且没有传入值时将被初始化为空字符串。

总的来说,在 Dart 和 C# 中,我们都可以通过构造函数来初始化新对象。虽然这两个语言中的构造函数存在一些区别,但它们的基本概念是相似的。