0

次のメンバー/メソッドを持つ多くのクラスがあります。

private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public bool isNamed(String name) { return getName().Equals(name); }

メンバー「name」を持つ新しいクラスを作成するたびに、これらすべてを書き直す必要があります。メソッドを一度記述して、必要なクラスに適用する方法はありますか?

4

4 に答える 4

3

コードは次のように変換できます。

public String Name { get;set;}

次に、次のように使用できます。

nObject.Name = "Stefan";
if(nObject.Name == "Stefan"){
   // do something
}else{
   // do something else
}

すべてのクラスに自動的に適用するには、これをインターフェイスにするだけです。

public interface INameable{
   public String Name {get;set;}
}

これを行うと、重要な他の基本クラスから継承できるようになります。

については、ここを参照してください

class YourClass : INameable{
  //implementation
}

そして、YourClass「Name」プロパティが自動的に挿入されるようになりました。

于 2013-02-10T16:43:30.363 に答える
3

基本クラスを定義するだけです(抽象化できます):

public abstract class Named 
{
    public string Name { get; set; }    
}

そしてそれから継承します:

public class Person : Named 
{ 
}

C# のように実際には必要ありません。isNamed文字列を と比較しても完全に安全==です。


あなたのクラスが、そうでない別のクラスからすでに継承している場合は、自動プロパティNamedを手動で追加するか、シミュレートされた多重継承に頼る必要があります。 Name

Namedまたは、すべての基本クラスに対して特定の変更を作成できます。

public abstract class NamedLifeForm : LifeForm
{ 
    public string Name { get; set; }
}

public class Person : NamedLifeForm
{
    // Person inherits both a Name and all relevant members of LifeForm
}

もう 1 つの方法は、と のインスタンスのNamed<T>2 つのプロパティを持つ汎用ラッパー を作成することです。しかし、そうすると構築やアクセスが面倒になるのでお勧めしません。NameT

于 2013-02-10T16:43:12.907 に答える
2

C# にはそのためのAutoPropertiesがあります。

public String Name {get; set; }

これは、あなたが話した getName() と setName() の両方を処理します。

使用法:
値を設定するには: 値Name = "MyName;
を取得するには:string theName = Name;

于 2013-02-10T16:43:39.147 に答える
0

オブジェクト指向プログラミングについて読むことをお勧めします。あなたは自分自身に多くの時間と労力(そしてやじ)を節約することができます。これが良い入門書ですhttp://www.amazon.com/Beginning-Object-Oriented-Programming-Dan-Clark/dp/1430235306

特定の質問に答えるには、継承について読む必要があります。関数を使用して「親」クラスを定義できます。次に、「子」クラスを継承して、同じ機能を使用できます。

http://msdn.microsoft.com/en-us/library/ms173149(v=vs.80).aspx

これがコード例です

public class PersonBase
{
     private String name;
     public String getName()
     {
          return this.name;
     }
     public void setName(string name)
     {
          this.name = name;
     }
     public bool isNamed(string name)
     {
           return this.name.Equals(name);
     }
}

public class Employee : PersonBase
{
}

これで、従業員はPersonBaseによって定義されたものをすべて使用できるようになります。

他の人が指摘しているように、プロパティを使用してコードを簡略化できます。また、「this.name」を使用する前に、null値を確認する必要があります。

プロパティへのリンクは次のとおりです。http: //msdn.microsoft.com/en-us/library/x9fsa0sw (v = vs.80).aspx

簡略化されたコード例は次のようになります。

public class PersonBase
{
     public String Name { get; set; }
}

public class Employee : PersonBase
{
}

これが、これらの概念について学ぶための正しい方向を示すのに役立つことを願っています。

于 2013-02-10T16:48:54.527 に答える