Концепция частного класса в C # - PullRequest
28 голосов
/ 05 февраля 2011

Могут ли частные классы существовать в C #, кроме внутренних классов?

Ответы [ 5 ]

38 голосов
/ 05 февраля 2011

Просто НЕТ.Ничто, кроме как во вложенном классе

  • Классы и структуры, которые не вложены в другие классы или структуры, могут быть public или внутренними .Тип, объявленный как общедоступный, доступен любому другому типу.Тип, объявленный как внутренний, доступен только для типов в одной сборке.Классы и структуры объявляются как внутренние по умолчанию , если только ключевое слово public не добавлено в определение класса.

  • Определения класса или структуры могут добавить внутреннее ключевое слово, чтобы сделать ихуровень доступа явный.Модификаторы доступа не влияют на класс или саму структуру - он всегда имеет доступ к себе и ко всем своим собственным членам.

  • Элементы структуры, включая вложенные классы и структуры, могут быть объявлены как открытые, внутренний или частный.Члены класса, включая вложенные классы и структуры, могут быть общедоступными, защищенными внутренними, защищенными, внутренними или частными.Уровень доступа для членов класса и членов структуры, включая вложенные классы и структуры, по умолчанию является закрытым.Закрытые вложенные типы недоступны извне содержащего типа.

  • Производные классы не могут иметь большей доступности, чем их базовые типы.Другими словами, у вас не может быть общедоступного класса B, производного от внутреннего класса A. Если бы это было разрешено, это сделало бы действие A общедоступным, поскольку все защищенные или внутренние члены A доступны из производного класса.Вы можете разрешить определенным другим сборкам доступ к вашим внутренним типам с помощью InternalsVisibleToAttribute .

9 голосов
/ 05 февраля 2011

Нет, нет. Вы не можете иметь закрытый класс, если он не вложен.

2 голосов
/ 05 февраля 2011

Нет. Какова будет область применения такого класса?

2 голосов
/ 05 февраля 2011

В каком сценарии, кроме как для внутреннего класса, вы хотели бы иметь «закрытый» класс?

Вы можете использовать модификатор internal для создания класса, который будет виден только в текущей сборке.

// the class below is only visible inside the assembly in where it was declared
internal class MyClass
{
}
1 голос
/ 21 февраля 2018

Мы можем объявить класс как Private внутри другого класса.Пожалуйста, найдите код ниже о том, как добиться того же:

 public class Class1
  {
    temp _temp ;
    public Class1()
    {
      _temp = new temp();   
    }    

    public void SetTempClass(string p_str, int p_Int)
    {
      _temp.setVar(p_str, p_Int);
    }

    public string GetTempClassStr()
    {
      return _temp.GetStr();
    }

    public int GetTempClassInt()
    {
      return _temp.GetInt();
    }

    private class temp
    {
      string str;
      int i;

      public void setVar(string p_str, int p_int)
      {
        str = p_str;
        i = p_int;
      }

      public string GetStr()
      {
        return str;
      }

      public int GetInt()
      {
        return i;
      }
    }
  }
...