используемый для определения того, что объект является экземпляром класса или некоторого подкласса этого класса. C# предоставляет такую же функциональность с помощью ключевого слова is
. Некоторые примеры того, как инструкции работают в C#, даны ниже. Можно видеть, что большая часть кода точно такая же, как и в Java:
public static void Main (string[] args)
int option = int.Parse(arg[0]);
if (option == 1) {
// что-нибудь сделать
}
else if (option == 2) {
// сделать что-нибудь еще
}
switch (option) {
case 1:
// сделать что-нибудь
break;
case 2:
// сделать что-нибудь еще
default:
break;
}
}
C# вводит инструкцию foreach
, используемую специально для перебора без изменения элементов коллекции или массива, чтобы получить желаемую информацию. Изменение содержимого может иметь непредсказуемые побочные эффекты. Инструкция foreach
обычно имеет форму, показанную ниже:
foreach(ItemType item in TargetCollection)
ItemType
представляет тип данных, хранящихся в коллекции или массиве, a TargetCollection
представляет реальный массив или коллекцию. Существует два набора требований, которым должна удовлетворять коллекция, перебор элементов которой будет выполняться с помощью инструкции foreach
. Первый набор имеет отношение к составу самой коллекции. Это следующие требования:
□ Тип коллекции должен быть интерфейсом, классом или структурой.
□ Тип коллекции должен включать метод GetEnumerator()
для возврата типа перечислителя. Тип перечислителя является по сути объектом, который позволяет перебрать коллекцию элемент за элементом.
Второй набор требований имеет дело с составом типа перечислителя, возвращаемого упомянутым выше методом GetEnumerator()
. Список требований дан ниже:
□ Перечислитель должен предоставить метод MoveNext()
типа boolean
.
□ MoveNext()
должен возвращать true
, если в коллекции есть еще элементы.
□ MoveNext()
должен увеличивать счетчик элементов при каждом вызове.
□ Тип перечислителя должен предоставлять свойство с именем Current
, которое возвращает ItemType
(или тип, который может быть преобразован в ItemType
).
□ Метод доступа свойства должен возвращать текущий элемент коллекции.
Следующий пример использует foreach
для просмотра таблицы Hashtable
:
Hashtable t = new Hashtable();
t['a'] = 'hello';
t['b'] = 'world';
t['c'] = 'of';
t['d'] = 'c-sharp';
foreach (DictionaryEntry b in t) {
Console.WriteLine(b.Value);
}
Ключевое слово private
используется, чтобы сделать методы и переменные доступными только изнутри элементов содержащего их класса. Функциональность одинакова в обоих языках, модификатор public
позволяет сущностям вне пакета получить доступ к внутренним элементам. Конечно, для C# это будут сущности вне пространства имен, а не пакета.
C# и Java различаются в том, как обрабатываются protected
и 'default'
. В то время как в Java protected
делает метод или переменную доступной для классов в том же пакете или подклассах класса, protected
в C# делает код видимым только для этого класса и подклассов, которые от него наследуют.
C# вводит также новый модификатор доступа — internal
. Ключевое слово internal
изменяет члены данных так, что они будут видимы всему коду внутри компонента, но не клиентам этого компонента. Различие здесь между модификатором в Java, который указывает элемент, доступный только для элементов в пакете, и internal
состоит в том, что internal
доступен всем элементам сборки, которая может охватывать несколько пространств имен. Сборки и пространства имен будут рассмотрены позже в этом приложении.
Модификатор abstract
имеет одну и ту же форму и синтаксис в обоих языках. Таким же является ключевое слово class
. C# не имеет модификаторов extends
или implements
. Чтобы вывести из класса или реализовать интерфейс, используйте оператор :
. Когда список базового класса содержит базовый класс и интерфейсы, базовый класс следует первым в списке. Ключевое слово interface
используется для объявления интерфейса. Примеры рассмотренных ранее концепций приведены ниже:
class ClassA: BaseClass, Iface1, Iface2 {
// члены класса
}
public interface IfruitHaver {
public void Fruit();
}
public class plant: IfruitHaver {
public Plant() {
}
public void Fruit() {
}
}
class Tree : Plant {
public Tree() {
}
}
Ключевое слово final
в Java трудно отнести к какой-то категории. Частично причина