Ватсон Карли
Шрифт:
SuperEX x = new SuperEX(Integer.parseInt(args[0]));
int tot = x.aMethod(Integer.parseInt(args[1]));
System.out.println(tot);
}
}
Класс-потомок этого класса сможет получить доступ к методу
aMethod
с помощью вызова super.aMethod(<int value>)
, к переменной power
— с помощью вызова super.power = <int value>
, и даже к конструктору — с помощью вызова super(<int value>)
, где <int value>
может быть любым целым литералом, переменной или константой. Аналогично в C# класс-потомок этого класса сможет получить доступ к методу
aMethod
с помощью вызова super.aMethod(<int value>)
и к переменной power
— с помощью вызова super.power = <int value>
. Сделать вызов базового конструктора тоже возможно, синтаксис, однако, будет отличаться. Пример ниже является эквивалентом в C# для SuperEX: namespace SuperEX {
using System;
public class SuperEX {
internal int power;
public SuperEX(int power) {
this.power = power;
}
public int aMethod(int x) {
int total = 1;
for (int i = 0; i < power; i++) {
total *= x;
}
return total;
}
public static void Main(String [] args) {
SuperEX x = new SuperEX(int.Parse(args[0]));
int tot = x.aMethod(int.Parse(args[1]));
Console.WriteLine(tot);
}
}
public class Child: SuperEX {
public Child : base(55) { }
}
}
Как можно видеть на примере класса-потомка
Child
, вызов конструктора базового класса является частью объявления конструктора класса-потомка. Программист может по своему усмотрению определить список параметров конструктора класса-потомка, но ссылка на конструктор базового класса должна соответствовать списку аргументов, требуемых базовым классом. В данном примере конструктор потомка может получить форму <child constructor>: base constructor(<int value>)
, где <int value>
может быть любым целым литералом, переменной или константой, a <child constructor>
представляет любой конструктор потомка, который хочет воспользоваться конструктором базового класса. Более общая версия, как получить доступ к конструктору базового класса, представлена ниже: ChildConstructor(argument_list) : BaseConstructor(argument_list)
Ключевые слова управления пакетами: import и package
Так же как в Java, в C# инструкции
import
предоставляют доступ к пакетам и классам в коде без полной квалификации, директива using
может использоваться для того, чтобы сделать компоненты пространства имен видимыми в классе без полной квалификации. В C# не существует эквивалента инструкции package
. Чтобы сделать класс частью пространства имен, надо поместить его в объявление пространства имен. Пространства имен будут обсуждаться более подробно позже в этой главе. Ключевые слова управления потоком выполнения и итерациями: break, case, continue, default, do, else, for, if, instanceof, return, switch и while
Большинство упомянутых выше ключевых слов имеют одинаковые имена, синтаксис и функциональность в C# и Java. Исключением является оператор Java
instanceof
, используемый для определения того, что объект является экземпляром класса или некоторого подкласса этого класса. 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)