Симон Робинсон - C# для профессионалов. Том II
Аналогично в Java ключевое слове static позволяет вызывать метод сначала без создания экземпляра класса. Для метода Main() можно выбрать в качестве возвращаемого типа значения void или int. void определяет, что метод не возвращает значение, a int определяет, что он возвращает целое значение.
Идентификаторы
Ключевые слова, рассматриваемые в следующем разделе, не могут служить идентификаторами ни в Java, ни в C#, однако в C# можно использовать ключевые слова как идентификаторы, помещая перед ними символ @. Отметим, что это исключение имеет отношение только к ключевым словам и не нарушает другие правила. Оба языка являются зависимы ми от регистра символов, поэтому идентификаторы должны иметь согласованное использование заглавных букв. Хотя идентификаторы могут содержать буквы и цифры, первый символ идентификатора как в C#, так и в Java не должен быть цифрой. Java не допускает никаких символов кроме $, а C# вообще не допускает никаких символов:
int 7х; // неверно, цифра не может начинать идентификатор
int х7; // верно, цифра может быть частью идентификатора
int х; // верно
int х$; // неверно, никакие символы недопустимы
int @7k; // неверно, @ работает только для ключевых слов
int @class; // верно, @ перед ключевым словом позволяет использовать
// его в качестве идентификатора
Стандарты именования
Одним из основных различий, которое может быть не очевидно на первый взгляд, и которое не связано специально с языком C#, является синтаксис записи идентификаторов. Java практикует обозначения типа camel, означающее, что методы и идентификаторы используют меленькую букву для первой буквы имени и заглавную букву для первой буквы любого другого слова в имени. Общий синтаксис, которому следуют большинство программистов в Java, представлен ниже:
int id;
int idName;
int id_name; // также используется
final int CONSTANT_NAME; // широко распространен
int reallyLongId;
public class ClassName; // каждая первая буква заглавная
public interface _InterfaceName; // с предшествующим подчеркиванием
public void method(){}
public void methodName(){}
public void longMethodName(){}
public void reallyLongMethodName(){}
На основе библиотеки классов, предоставленной компанией Microsoft для C#, можно сделать некоторые предположения о стандартах наименований в C#. Документированные рекомендации по именованию для C# не были представлены в то время когда писалась эта книга. Каждая первая буква идентифицирующих имен всех методов и свойств будет заглавной, так же как и каждая первая буква имен всех классов и пространств имен (рассматриваемых позже). Интерфейсы используют в качестве первого символа I. Некоторые примеры приведены ниже:
int id;
int idName;
public class ClassName // каждая первая буква заглавная
public interface IInterfaceName // имени интерфейса предшествует I
public void Method(){} // первая буква всегда заглавная
public void MethodName(){} // первая буква всех других слов
// будет заглавная
public void LongMethodName(){}
public void ReallуLongMetodName(){}
Ключевые слова
Как известно, ключевое слово является специальным зарезервированным словом языка. Мы уже встречали некоторые из них допустим, объявление переменной как целого числа с помощью int. Другими примерами ключевых слов являются public, class, static и void в листингах кода в этом приложении.
Ключевые слова можно разделить на ряд категорий в связи с их назначением. В этом разделе мы выделим и определим каждую категорию, а также идентифицируем ключевые слова. Реальные ключевые слова будут идентифицироваться своими версиями в Java, чтобы можно было легко их находить. Затем будет дан эквивалент C# (если существует). Для тех ключевых слов, которые присутствуют только в Java, будет предоставлено лучшее соответствие. Ключевые слова, представленные в C#, но не в Java, будут даны в своей собственной категории с лучшим приблизительным эквивалентом в Java (если такой существует).
Простейшие ключевые слова: byte, char, short, int, long, float, double и booleanПримитивные типы данных в обоих языках ссылаются на низкоуровневые типы значений языка. Конечно, диапазон значений указанных типов может различаться в том или другом языке. Логические значения в C# идентифицируются ключевым словом bool в противоположность boolean в Java. Ниже представлен табличный список типов данных Java и их аналогов в C#:
Тип Java Описание Эквивалентный тип C# Описание byte 8-битовое со знаком sbyte 8-битовое со знаком short 16-битовое со знаком short 16-битовое со знаком int 32-битовое со знаком int 32-битовое со знаком long 64-битовое со знаком long 64-битовое со знаком float 32-битовое число с плавающей точкой со знаком float 32-битовое число с плавающей точкой со знаком double 64-битовое число с плавающей точкой со знаком double 64-битовое число с плавающей точкой со знаком boolean true/false bool true/false char 2-байтовый Unicode char 2-байтовый UnicodeСуществует также ряд типов, поддерживаемых C#, которые Java не использует. Таблица ниже выделяет эти типы данных.
Уникальный тип данных C# Описание Byte 8-битовое целое без знака ushort 16-битовое целое без знака Uint 32-битовое целое без знака ulong 64-битовое целое без знака decimal 128-битовое Ключевые слова-переменные: this, void и superЭти ключевые слова сами являются переменными. Оба языка, Java и C#, имеют по три ключевых слова, которые попадают в эту категорию. Ключевые слова this и void обладают в обоих языках одинаковой функциональностью.
super — эта ссылочная переменная используется для указания класса-предка. В C# эквивалентом является base. Возьмем класс Power, который предоставляет возможность найти степень заданного числа и степень, в которую требуется возвести (при условии, что не происходит переполнение):
public class SuperEX {
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(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) {