2012-05-02 2 views
1

Мне известно о вложенном классе. как я мог бы создать свой вложенный класс таким образом, чтобы вне родительского класса вложенного класса никто не сможет получить доступ к вложенному классу, например, create экземпляра и т. д., потому что я хочу, чтобы дочерний класс был приватным. Я хочу показать свое дочернее свойство класса, метод все по свойству или методу родительского класса. попросите меня написать код для такого типа вложенного класса. благодаряИспользование C# вложенного класса и accessiblity

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

Марк внутренний класс, как private вместо public.

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 или сравнить метод вашего внешнего класса, чтобы ответить на вторую часть вопроса в ФП (в «Я хочу показать свое дочернее свойство класса, метод все по свойству или методу родительского класса»), в противном случае +1 – dash

+0

@dash Добавил свойство для этого. –

+0

дочерний класс FirstNameComparer не имеет конструктора .... поэтому конструктор по умолчанию будет работать за сценой. По умолчанию конструктор по умолчанию является общедоступным. – 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 для ответа на вторую часть вопроса ОП. – dash

Смежные вопросы