Основные сведения о классах (сравнение языков C# и Java)

Обновлен: Ноябрь 2007

В следующих разделах сравниваются модификаторы в языках C# и Java.

Модификаторы доступа

Принцип действия модификаторов C# и модификаторов Java имеет несколько небольших отличий. Каждый член класса или сам класс может быть объявлен с модификатором доступа, определяющим разрешенную область доступа. Для классов, объявляемых вне других классов, могут задаваться только общие или внутренние модификаторы. Для вложенных классов, как и других членов классов, могут указываться любые из следующих пяти модификаторов доступа:

  • public

    Видимый для всех.

  • protected

    Видимый только для производных классов.

  • private

    Видимый только внутри заданного класса.

  • internal

    Видимый внутри отдельной сборки.

  • protected internal

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

Модификаторы public, protected и private

Модификатор public делает член доступным везде, как внутри, так и вне класса. Модификатор protected указывает, что доступ может осуществляться только внутри содержащего класса или производных от него классов. Модификатор private означает, что доступ может осуществляться только из содержащего типа. В языке C# по умолчанию используется модификатор доступа private, а в Java по умолчанию доступ осуществляется из любого объекта внутри содержащего пакета.

Модификатор internal

Элемент internal доступен только внутри текущей сборки. Сборка в платформе .NET Framework примерно соответствует файлу JAR в языке Java; она представляет стандартные блоки, из которых можно создавать другие программы.

Модификатор protected internal

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

Модификатор sealed

Класс, в объявлении которого указан модификатор sealed, является противоположностью абстрактного класса — от него нельзя осуществлять наследование. Класс можно пометить как запечатанный, чтобы предотвратить переопределение его функций другими классами. Естественно, запечатанный класс не может быть абстрактным. Кроме того, следует обратить внимание на то, что struct является неявно запечатанным, поэтому его нельзя наследовать. Модификатор sealed эквивалентен пометке класса с помощью ключевого слова final в языке Java.

Модификатор readonly

Чтобы задать константу в C#, воспользуйтесь модификатором const или readonly вместо ключевого слова final в Java. Различительным признаком двух модификаторов в C# является то, что элементы const обрабатываются во время компиляции, а значения полей readonly задаются во время выполнения. Поэтому назначение значений полям readonly может выполняться как в конструкторе класса, так и во время объявления. Например, следующий класс объявляет переменную readonly с именем "IntegerVariable", инициализируемую в конструкторе класса:

public class SampleClass
{
    private readonly int intConstant;

    public SampleClass ()  //constructor
    {
        // You are allowed to set the value of the readonly variable 
        // inside the constructor
        intConstant = 5;
    }


    public int IntegerConstant
    {
        set
        {
            // You are not allowed to set the value of the readonly variable 
            // anywhere else but inside the constructor

            // intConstant = value;  // compile-time error
        }
        get
        {
            return intConstant;
        }
    }
}
class TestSampleClass
{
    static void Main()
    {
        SampleClass obj= new SampleClass();

        // You cannot perform this operation on a readonly field.
        obj.IntegerConstant = 100;

        System.Console.WriteLine("intConstant is {0}", obj.IntegerConstant);  // 5
    }
}

Если модификатор readonly применяется к статическому полю, он должен инициализироваться в статическом конструкторе класса.

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Модификаторы доступа (Руководство по программированию в C#)

Константы (руководство по программированию на C#)

Другие ресурсы

Язык программирования C# для разработчиков на Java