2009-05-13 12 views
8

C#では、そのクラスの静的メソッドからクラスの静的メソッドを呼び出すときに、クラス名の代わりにというの汎用プレフィックスがありますか?以下の例ではそうPHPの "self ::"に相当するC#とは何ですか?

、代わりに私がそう例えばSelf.DatabaseConnectionExists()ような何かを言うことができるか、Customer.DatabaseConnectionExists()を言って後でクラスの名前を変更すると、すべての接頭辞を変更する必要はありませんか?

class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public static Customer GetCurrentCustomer() 
    { 
     if (Customer.DatabaseConnectionExists()) 
     { 
      return new Customer { FirstName = "Jim", LastName = "Smith" }; 
     } 
     else 
     { 
      throw new Exception("Database connection does not exist."); 
     } 
    } 

    public static bool DatabaseConnectionExists() 
    { 
     return true; 
    } 
} 
+0

私は何も認識していませんが、コンテキストメニューから "Refactor"に移動するのはなぜですか?それは、手作業で編集した苦労からあなたを救います。 – annakata

+1

しかし、 "self ::"が表示されている場合は、何が呼び出されていてもそのクラスを参照していることがわかります。 "Customer ::"が表示されている場合は、実際にCustomerクラスにいるかどうかを調べる必要があります。それは単にコードをもう少し明示的にしています。私は見慣れたものです。 –

答えて

15

本当相当するものはありません - あなたはすなわち

DatabaseConnectionExists() 

呼び出しの後者のスタイルがある、すなわち

Customer.DatabaseConnectionExists() 

または完全修飾子を逃し、クラス名を指定するか持っていますそれは簡単で意味を失わないので、お勧めです。また、インスタンス内のメソッド呼び出し(つまり、InstanceMethod()以外の呼び出しはthis.InstanceMethod()ではありません。これはあまり冗長です)。

+3

"this"を使用すると、コードを読みやすくすると思います。例えばメソッドと "ClassName"。静的メソッドの場合はそうでなければ、それがインスタンスまたは静的メソッドの場合はメソッド呼び出しを見て分かりません。 PHPからC#への移行この違いを理解するために、コードのコンテキストでよく調べなければならないと感じています。 –

+0

@Edward Tanguay:なぜこれを考えるかもしれないが、実際はあまりにも冗長すぎる(少なくとも私の意見では)。ほとんどのデザインガイドラインに違反しているので、this.MethodName()を使用して呼び出されるメソッドはほとんどありません。フィールドとプロパティを持つ 'this'の使い方はかなり異なります。 – Noldorin

0

いいえ、そうではありません。しかし、リファクタリングツールでは、クラスの名前を変更してもあまり心配してはいけません。

13

クラスの中からメソッドを呼び出す場合は、:: Selfのようなものを指定する必要はありません。メソッド名だけが行います。

class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public static Customer GetCurrentCustomer() 
    { 
     if (DatabaseConnectionExists()) 
     { 
      return new Customer { FirstName = "Jim", LastName = "Smith" }; 
     } 
     else 
     { 
      throw new Exception("Database connection does not exist."); 
     } 
    } 

    public static bool DatabaseConnectionExists() 
    { 
     return true; 
    } 
} 
+0

私は同じ答えを書いていました+クラスの名前を変更したい場合に備えてリファクタリングツールを使うことができるという事実。個人的には、私は "Resharper"リファクタリングツールを使用します。 – Nordes

4

そのまま放置してください。 DatabaseConnectionExistsがクラスの内部で定義されています。

2

プレフィックスなしで呼び出すだけです。

関連する問題