Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Rantaian Pembina dalam C Berbanding dengan Pelaksanaan C#?

Bagaimanakah Rantaian Pembina dalam C Berbanding dengan Pelaksanaan C#?

Linda Hamilton
Lepaskan: 2025-01-01 11:54:11
asal
613 orang telah melayarinya

How Does Constructor Chaining in C   Compare to C#'s Implementation?

Constructor Chaining dalam C : Perbandingan dengan C#

Dalam C#, pembina boleh dirantai bersama untuk memulakan objek secara berperingkat. Sebagai pembangun C#, anda mungkin tertanya-tanya sama ada mekanisme yang serupa wujud dalam C .

Dalam coretan kod C# yang disediakan:

class Test {
    public Test() {
        DoSomething();
    }

    public Test(int count) : this() {
        DoSomethingWithCount(count);
    }

    public Test(int count, string name) : this(count) {
        DoSomethingWithName(name);
    }
}
Salin selepas log masuk

Setiap pembina memanggil pendahulunya, membenarkan pemulaan berurutan bagi sesuatu keadaan objek.

C 11 dan Seterusnya

C 11 memperkenalkan ciri yang dikenali sebagai mewakilkan pembina yang menyediakan kefungsian yang serupa dengan rantaian pembina dalam C#.

class Foo {
public: 
  Foo(char x, int y);
  Foo(int y) : Foo('a', y) {};
};
Salin selepas log masuk

Dalam contoh ini, pembina Foo(int y) mewakilkan permulaan kepada pembina Foo(char x, int y) dengan nilai khusus untuk x dan y.

C 03

C 03 tidak menyokong rantaian pembina secara langsung. Walau bagaimanapun, terdapat dua kaedah penyelesaian:

  1. Parameter Lalai: Pembina boleh digabungkan melalui parameter lalai, membenarkan penciptaan berbilang pilihan permulaan.
class Foo {
public:
  Foo(char x, int y=0);  // combines two constructors (char) and (char, int)
  // ...
};
Salin selepas log masuk
  1. Kaedah Init: Kaedah init persendirian boleh diperkenalkan untuk berkongsi kod permulaan biasa antara berbilang pembina.
class Foo {
public:
  Foo(char x);
  Foo(char x, int y);
  // ...
private:
  void init(char x, int y);
};

Foo::Foo(char x)
{
  init(x, int(x) + 7);
  // ...
}

Foo::Foo(char x, int y)
{
  init(x, y);
  // ...
}

void Foo::init(char x, int y)
{
  // ...
}
Salin selepas log masuk

Untuk C 03, teknik kaedah init biasanya lebih disukai kerana fleksibiliti dan potensi faedah prestasi berbanding menggunakan parameter lalai.

Atas ialah kandungan terperinci Bagaimanakah Rantaian Pembina dalam C Berbanding dengan Pelaksanaan C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan