Инициализация объектов без вызова конструктора 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Инициализация объектов без вызова конструктора



Можно использовать инициализаторы объектов для инициализации объектов типов без вызова конструкторов типов.

В следующем примере показано, как использовать инициализаторы объектов с именованными объектами. Анонимные типы необходимо объявлять с инициализаторами объектов. Дополнительные сведения см. в разделе Возвращение поднаборов свойств элементов в запросе.

Пример

В следующем примере показано, как инициализировать одиночный новый тип StudentName с помощью инициализатора объектов.

ß----

В следующем примере показано, как инициализировать коллекцию типов StudentName с помощью инициализатора коллекции. Обратите внимание, что инициализаторе коллекции представляет собой ряд инициализаторов объектов, перечисленных через запятую.

 

ß----

 

 

Компиляция кода

Для выполнения этого кода скопируйте класс в проект консольного приложения на языке Visual C#, которое было создано в среде разработки Visual Studio. По умолчанию этот проект предназначен для версии 3.5 платформы.NET Framework и имеет ссылку на библиотеку System.Core.dll и директиву using для пространства имен System.Linq. Если одно или более требований в проекте отсутствуют, их можно добавить вручную.

 


How to: Initialize a Dictionary with a Collection Initializer

A Dictionary<(Of <<TKey, TValue>>)>) contains a collection of key/value pairs. Its Add method takes two parameters, one for the key and one for the value. To initialize a Dictionary<(Of <<TKey, TValue>)>>, or any collection whose Add method takes multiple parameters, enclose each set of parameters in braces as shown in the following example.

Example

In the following code example, a Dictionary<(Of <<TKey, TValue>)>> is initialized with instances of type Student.

Dictionary<int, StudentName> students = new Dictionary<int, StudentName>() { { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}}, { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317, }}, { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198, }} };

Note the three pairs of braces in each object initializer. The innermost braces enclose the object initializer for the Scores list. The next set encloses the initializer for the Student, and the outermost braces enclose the initializer for the key/value pair that will be added to the studentsDictionary<(Of <<TKey, TValue>)>>. Finally, the whole collection initializer is enclosed in braces.

Compiling the Code

To run this code, copy and paste the class into a Visual C# console application project that has been created in Visual Studio. By default, this project targets version 3.5 of the.NET Framework, and it has a reference to System.Core.dll and a using directive for System.Linq. If one or more of these requirements are missing from the project, you can add them manually.


Инициализация словаря с помощью инициализатора коллекции

Dictionary<(Of <(TKey, TValue>)>) содержит коллекцию пар "ключ-значение". Метод Add берет два параметра, один для ключа и один для значения. Для инициализации Dictionary<(Of <(TKey, TValue>)>) или любой коллекции, метод Add которой использует несколько параметров, следует заключить каждый набор параметров в скобки, как показано в следующем примере.

Пример

В следующем примере Dictionary<(Of <(TKey, TValue>)>) инициализируется к экземплярами типа Student.

ß---

 

Обратите внимание на три пары скобок в каждом инициализаторе объекта. Внутренняя пара скобок заключает инициализатор объекта для списка Scores. Следующая пара скобок заключает инициализатор Student, а внешняя пара скобок — инициализатор пары ключа и значения, которая будет добавлена к students Dictionary<(Of <(TKey, TValue>)>). И наконец, весь инициализатор коллекции заключается в скобки.

Компиляция кода

Для выполнения этого кода скопируйте класс в проект консольного приложения на языке Visual C#, которое было создано в среде разработки Visual Studio. По умолчанию этот проект предназначен для версии 3.5 платформы.NET Framework и имеет ссылку на библиотеку System.Core.dll и директиву для пространства имен System.Linq. Если одно или более требований в проекте отсутствуют, их можно добавить вручную.

 


Fields

This topic describes fields, which are objects or values in a class or struct. Fields enable classes and structures to encapsulate data.

For simplicity, these examples use fields that are public, but we do not recommend this practice. Fields should generally be private. External classes should access fields indirectly through methods, properties, or indexers.

Fields

Fields store the data a class must have to fulfill its design. For example, a class that represents a calendar date might have three integer fields: one for the month, one for the day, and one for the year. Fields are declared in the class block by specifying the access level of the field, followed by the type of the field, followed by the name of the field. For example:

public class CalendarDate { public int month; public int day; public int year; }

To access a field in an object, add a period after the object name, followed by the name of the field, as in objectname.fieldname. For example:

CalendarDate birthday = new CalendarDate(); birthday.month = 7;

 


Поля

В этом разделе описываются поля, являющиеся объектами или значениями в классах или структурах. Поля позволяют классам и структурам инкапсулировать данные.

Для простоты в этих примерах используются открытые поля, но на практике это не рекомендуется. Лучше использовать закрытые поля. Внешние классы должны получать доступ к полям опосредованно, с помощью методов, свойств или индексаторов. Дополнительные сведения см. в разделах Методы, Свойства и Индексаторыию на C#).

Поля

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

public class CalendarDate { public int month; public int day; public int year; }

Для доступа к члену объекта нужно добавить точку после имени объекта и указать имя поля: objectname.fieldname. Пример.

CalendarDate birthday = new CalendarDate(); birthday.month = 7;

 


A field can be given an initial value by using the assignment operator when the field is declared. To automatically assign the month field to 7, for example, you would declare month as in the following example:

public class CalendarDateWithInitialization { public int month = 7; //... }

Fields are initialized immediately before the constructor for the object instance is called. If the constructor assigns the value of a field, it will overwrite any value given during field declaration.

Note:
A field initializer cannot refer to other instance fields.

Fields can be marked as public, private, protected, internal, or protected internal. These access modifiers define how users of the class can access the fields.

A field can optionally be declared static. This makes the field available to callers at any time, even if no instance of the class exists.

A field can be declared readonly. A read-only field can only be assigned a value during initialization or in a constructor. A staticreadonly field is very similar to a constant, except that the C# compiler does not have access to the value of a static read-only field at compile time, only at run time.

 


Полю можно назначить первоначальное значение, используя оператор присвоения при объявлении поля. Например, чтобы автоматически присвоить полю month значение 7, можно объявить поле month как указано в следующем примере:

public class CalendarDateWithInitialization { public int month = 7; //... }

Поля инициализируются непосредственно перед вызовом конструктора для экземпляра объекта. Если конструктор присваивает полю значение, оно заменит значения, присвоенные при объявлении поля. Дополнительные сведения см. в разделе Использование конструкторов.

Примечание.
Инициализатор поля не может ссылаться на другие поля экземпляров.

Поля могут быть отмечены модификаторами public, private, protected, internal или protected internal. Эти модификаторы доступа определяют порядок доступа к полю для пользователей класса. Дополнительные сведения см. в разделе Модификаторы доступа.

Также при необходимости поле может быть объявлено с модификатором static. При этом поле становится доступным для вызова в любое время, даже экземпляр класса отсутствует. Дополнительные сведения см. в разделе Статические классы и члены статических классов.

Также при необходимости поле может быть объявлено с модификатором readonly. Полю с этим модификатором (то есть полю, доступному только для чтения) значения могут быть присвоены только при инициализации или в конструкторе. Поле с модификаторами static readonly (статическое, доступное только для чтения) очень похоже на константу, за исключением того, что компилятор C# не имеет доступа к значению такого поля при компиляции: доступ возможен только во время выполнения. Дополнительные сведения см. в разделе Константы.

 


Constants

Classes and structs can declare constants as members. Constants are values which are known at compile time and do not change. (To create a constant value that is initialized at runtime, use the readonly keyword.) Constants are declared as a field by using the const keyword before the type of the field. C# does not support const methods, properties, or events.

Constants must be initialized as they are declared. For example:

class Calendar1 { public const int months = 12; }

In this example, the constant months will always be 12, and it cannot be changed even by the class itself. Constants must have a type of sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, or string), an enumeration, or a reference to null.

Multiple constants of the same type can be declared at the same time, for example:

class Calendar2 { const int months = 12, weeks = 52, days = 365; }

The expression that is used to initialize a constant can refer to another constant as long as it does not create a circular reference. For example:

class Calendar3 { const int months = 12; const int weeks = 52; const int days = 365;   const double daysPerWeek = days / weeks; const double daysPerMonth = days / months; }

Constants can be marked as public, private, protected, internal, or protectedinternal. These access modifiers define how users of the class can access the constant.

Constants are accessed as if they were static fields, although they cannot use the static keyword. Expressions that are not in the class that defines the constant must use the class name, a period, and the name of the constant to access the constant. For example:

int birthstones = Calendar.months;

Константы

Классы и структуры могут объявлять константы в качестве членов. Константы — это значения, известные во время компиляции и не изменяющиеся. (Чтобы создать постоянное значение, инициализируемое во время выполнения, используется ключевое слово readonly.) Константы объявляются как поля с помощью ключевого слова const, располагаемого перед типом поля. Язык C# не поддерживает методы, свойства и события с ключевым словом const.

Константы должны инициализировать сразу после объявления. Например:

ß---

В этом примере константа months будет всегда иметь значение 12, и ее значение не может быть изменено даже самим классом. Константы должны иметь тип sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool или string), перечисление либо ссылку на значение null.

Несколько констант одного типа можно объявить одновременно, например:

ß--

Используемое для инициализации константы выражение может ссылаться на другую константу, если при этом не создается циклическая ссылка. Например:

ß--

Константы могут быть отмечены модификаторами public, private, protected, internal или protected internal. Эти модификаторы доступа определяют порядок доступа к константе для пользователей класса. Дополнительные сведения см. в разделе Модификаторы доступа.

Доступ к константам осуществляется, как если бы они были статическими поля, хотя для них и нельзя использовать ключевое слово static. В выражениях, которые не входят в класс, в котором определена константа, для доступа к ней необходимо использовать имя класса, точку и имя этой константы. Например:

int birthstones = Calendar.months;

 


How to: Define Constants in C#

Constants are fields whose values are set at compile time and can never be changed. Use constants to provide meaningful names instead of numeric literals ("magic numbers") for special values.

Note:
In C# the #define preprocessor directive cannot be used to define constants in the way that is typically used in C and C++.

To define constant values of integral types (int, byte, and so on) use an enumerated type.

To define non-integral constants, one approach is to group them in a single static class named Constants. This will require that all references to the constants be prefaced with the class name, as shown in the following example.

Example

static class Constants { public const double Pi = 3.14; } class Program { static void Main() { double radius = 5.3; double area = Constants.Pi * (radius * radius); } } }

The use of the class name qualifier helps ensure that you and others who use the constant understand that it is constant and cannot be modified.

 


Объявление констант в C#

Константы — это поля, значения которых устанавливаются во время компиляции и не изменяются. Использование констант позволяет оперировать значимыми именами числовых литералов для особых значений.

Примечание.
В C# нельзя использовать директиву предварительной обработки #define для определения переменных таким же образом, как это обычно делается в C и C++.

Чтобы определить значения переменных интегральных типов (int, byte и т.д.), следует использовать перечисленный тип.

Чтобы определить неинтегральные константы, можно сгруппировать их в один статический класс Constants. При этом будет необходимо указывать во всех ссылках на константы имя класса, как показано в следующем примере.

Пример

ß-----

 

 

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

 


Nested Types

A type defined within a class or struct is called a nested type. For example:

class Container { class Nested { Nested() { } } }

Regardless of whether the outer types is a class or a struct, nested types default to private, but can be made public, protected internal, protected, internal, or private. In the previous example, Nested is inaccessible to external types, but can be made public like this:

class Container { public class Nested { Nested() { } } }

The nested, or inner type can access the containing, or outer type. To access the containing type, pass it as a constructor to the nested type. For example:

public class Container { public class Nested { private Container m_parent; public Nested() { } public Nested(Container parent) { m_parent = parent; } } }

Nested types can access private and protected members of the containing type, including any inherited private or protected members.

In the previous declaration, the full name of class Nested is Container.Nested. This is the name used to create a new instance of the nested class, as follows:

Container.Nested nest = new Container.Nested();

Вложенные типы

Тип, определенный внутри класса или структуры, называется вложенным типом. Пример.

ß----

Независимо от того, являются ли внешние типы классом или структурой, вложенные типы по умолчанию являются private, но могут быть также public, protected internal, protected, internal или private. В предыдущем примере тип Nested недоступен для внешних типов, но он может являться открытым:

class Container { public class Nested { Nested() { } } }

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

ß---

 

 

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

В предыдущем объявлении полным именем класса Nested является Container.Nested. Это имя используется для создания нового экземпляра вложенного класса, как показано ниже:

Container.Nested nest = new Container.Nested();

 


Access Modifiers

Classes and structs can be restricted so that only the program or namespace they are declared in may use them. Class members can be restricted so that only derived classes can use them, or restricted so that only classes in the current namespace or program can use them. Access modifiers are keywords added to the class, struct, or member declaration to specify these restrictions. Those keywords are public, private, protected, and internal. For example:



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 198; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.19.56.45 (0.065 с.)