2017-07-04 7 views
-3

昨日私はPHPクラスを読んでいて、突然何か変わってしまいました。それはC#とPHPのコンストラクタに関するものでした。コンストラクタは正確に何ですか?

私の質問はコンストラクタとは何ですか?それはメソッドのようなことをし、メモリなどのクラスに必要なリソースを取ることができるクラスをインスタンス化するときに使用される特別なメソッドではありませんか?例えば、Bという名前の別のクラスを派生させ、Bのインスタンスを作成してBのコンストラクタを呼び出し、その親(A)にいくつかの引数を送ると、base(args)という名前の親クラスがあるとします。 (C#では)、parent :: __ construct(args)(PHPでは)を使用するので、親コンストラクタを呼び出して呼び出します。親のリソースを正確に取ることは望ましくありませんが、親コンストラクタを呼び出すだけですわたしたちのため。ここで何が起こりますか?

この場合、単に関数のように呼び出されたと思います! :\私は私の自己が明確かどう作られたかわからない...任意のあいまいさがある場合は掲載していません、と感謝;)

は私の方法により負の投票を与えることによって 感謝を更新しました... Microsoft Docs ここまで読んでみると、コードのブロックを保持する単純な関数以上のものです(しかし、あなたが言った違い、返り値などはありません) それはちょうど関数インスタンスが作成されたときに呼び出されました。なぜなら、それをプライベートにすると、それ以上インスタンスを作成できないのはなぜですか? なぜクラスを作成したいのですか?クラス名の末尾にa()を追加し、コンストラクタにargsを渡したい場合、それらを使って()を送信しますか? [人new_person =新しい人();] あなたは、このにも再び負の投票、あらゆる努力を示していない問題を考える場合:D

+3

私はあなたが基本的にそこにいると思います。セマンティクスを使ってそれを強制する初期化メソッドです。コンストラクタに続く特別なブードゥーはありません。基本的には、通常は独立して呼び出すことができないメソッドです。 –

+0

[C#コンストラクタの実行順序](https://stackoverflow.com/questions/1882692/c-sharp-constructor-execution-order)を参照してください。 。そこにはジョン・スケートからの良い答えがあります。 –

答えて

1

基本的に、コンストラクタは単なる関数です。通常の関数とコンストラクタの違いは、コンストラクタ

  1. が戻り値(でも空ではない)
  2. は、クラス自体(または事前に定義された特別な名前を持っている)のような名前が付けられていないこと、である
  3. は、オブジェクトが使用可能な状態に
  4. がときcreatのコンストラクタが自動的に呼び出されます

他の関数のように呼び出すことはできませんされる前に実行されなければならない必須機能として分類されていますオブジェクトの新しいインスタンスを作成します。

更新:あなたは(外から)プライベートコンストラクタで何かの新しいインスタンスを作成することができない理由

が理解した瞬間のための通常の機能としてそれを見てください。
new ClassWithPrivateConstructor()を上記クラスの外から呼び出す場合は、コンストラクターにアクセスできないため動作しません。

これで、プライベートコンストラクタが役に立たないと考えるかもしれません。しかし、そうではありません。有効なケースがあります。例えば。シングルトンオブジェクト。

()については、コンストラクタを通常の関数として再度考えてください。あなたはコンストラクタを呼びたいと思う。たぶん議論でさえ。そのため、オブジェクトの新しいインスタンスを作成するときに()が必要です。

+0

私は私の質問を更新...あなたがそれを見直すと感謝します:) –

+0

私の答えを – Mischa

+0

クラスを作成し、この式(new class_name();)を使用して、実際にコンストラクタを呼び出す必要がありますか? –

1

コンストラクタです方法に類似したコードのブロックですオブジェクトのインスタンスが作成されるときに呼び出されます。

コンストラクタには戻り値の型がありません。コンストラクターの名前は、クラスの名前と同じでなければなりません。

+0

私の質問を更新...私はあなたがそれをもう一度見ていただければ幸いです:) –

関連する問題