2012-05-02 8 views
1

ネストされたクラスを認識しています。どのように私はネストされたクラスをネストされたクラスの親クラスの外側に誰も私が子クラスがプライベートになりたいので、インスタンス作成などのネストされたクラスにアクセスすることができるように設計することができます。私は私の子クラスのプロパティを公開したい、親クラスのプロパティまたはメソッドですべてを処理する。そのような種類のネストされたクラスのコードを記述するように私に指示してください。ありがとうC#ネストされたクラスとアクセス可能性の使用

public class Person 
{ 
private string _firstName; 
private string _lastName; 
private DateTime _birthday; 

//... 

public class FirstNameComparer : IComparer<Person> 
{ 
    public int Compare(Person x, Person y) 
    { 
     return x._firstName.CompareTo(y._lastName); 
    } 
} 

} 

答えて

7

内部クラスをpublicの代わりにprivateとマークしてください。

public class Person 
{ 
    private string _firstName; 
    private string _lastName; 
    private DateTime _birthday; 

    private FirstNameComparer firstNameComparer = new FirstNameComparer(); 

    public int CompareFirstNames(Person x, Person y) 
    { 
     return firstNameComparer.Compare(x, y); 
    } 

    //... 

    private class FirstNameComparer : IComparer<Person> 
    { 
     public int Compare(Person x, Person y) 
     { 
      return x._firstName.CompareTo(y._lastName); 
     } 
    } 
} 
+0

私もGetComparerを追加したり、OPの質問の後半部分に答えるために、あなたの外側のクラスにメソッドを比較します:あなたは、そのプロパティの一部を公開したい場合は、このようにメインクラスの新しいプロパティを作成することができます"私は子クラスのプロパティを公開したい、親クラスのプロパティまたはメソッドですべてをメソッドする")、そうでなければ+1 – dash

+0

@dashそれにプロパティを追加しました。 –

+0

子クラスFirstNameComparerにはコンストラクタがありません。そのため、デフォルトのコンストラクタはシーンの背後で動作します。既定のコンストラクターはpublicです。 – Thomas

2

あなたはネストされたクラスを作ることができますprivate。メインクラスはネストされたクラスインスタンスの作成を担当します。

1

ネストされたクラスにプライベートアクセサを使用できます。 (

private FirstNameComparer _FirstNameComparer = new FirstNameComparer(); 
public int Compare(Person x, Person y) 
    { 
     return _FirstNameComparer.Compare(Person x, Person y); 
    } 
+0

+1 OPの質問の第2部分にも答えるため+1。 – dash

関連する問題