Использование конструкторов для инициализации полей только для чтения

Конструкторы с аргументами

Результат выполнения

Статический конструктор

Для класса можно написать статистический конструктор без параметров (конструктор по умолчанию).

Например:

 

using System;

namespace ConsoleApplication2

{

class CA

{

public int x;

public static int m;

public CA()

{

x=3;

}

static CA()

{

m=5;

}

 

}

 

class Class1

{

[STAThread]

static void Main(string[] args)

{

CA obj=new CA();

Console.WriteLine("x={0,2} m={1,2}",obj.x,CA.m);

}

}

}

x= 3 m= 5

 

Статистический конструктор не имеет спецификации доступа, так как он никогда не вызывается кодом C#, а только самой средой исполнения .NET, и вызывается он только один единственный раз, еще до создания какого либо экземпляра класса.

Применяются статистические конструкторы для инициализации статических полей класса.

 

Конструктор, принимающий параметры, называется конструктором с аргументами. Конструкторы с аргументами позволяют разные объекты одного и того же класса по-разному инициализировать.

Пример:

 

using System;

namespace ConsoleApplication15

{

class CA

{

public int x,y,z;

public CA()

{

x=3;

y=2;

z=x+y;

}

public CA(int a,int b)

{

x=a;

y=b;

z=a+b;

}

public CA(int a,int b,int c)

{

x=a;

y=b;

z=c;

}

 

}

 

class Class1

{

[STAThread]

static void Main(string[] args)

{

CA obj=new CA();

Console.WriteLine("x={0,2} y={1,2} z={2,2}",obj.x,obj.y,obj.z);

CA obj1=new CA(5,7);

Console.WriteLine("x={0,2} y={1,2} z={2,2}",obj1.x,obj1.y,obj1.z);

CA obj2=new CA(5,7,25);

Console.WriteLine("x={0,2} y={1,2} z={2,2}",obj2.x,obj2.y,obj2.z);

}

}

}

Результат работы программы:

x = 3 y = 2 z = 5

x = 5 y = 7 z = 12

x = 5 y = 7 z = 25

 

Конструкторов с аргументами в классе может быть сколь угодно много, лишь бы список принимаемых параметров был разный (см. перегруженные функции).

 

 

Классы могут содержать поля только для чтения. Поле только для чтения – это константное поле, значение которого изменить нельзя. В отличие от обычных констант, значение которых задается непосредственно в тексте программы, начальное значение поля только для чтения может быть вычислено в процессе выполнения приложения. Начальное значение поля только для чтения может быть установлено только внутри конструктора. Для объявления поля для чтения используется ключевое слово readonly.

 


Пример:

 

using System;

 

namespace ConsoleApplication15

{

class CA

{

public int x,y,z;

public readonly int rd;

public CA()

{

x=3;

y=2;

z=x+y;

rd=x+y+z;

 

}

public CA(int a,int b)

{

x=a;

y=b;

z=a+b;

rd=x+y+z;

 

}

public CA(int a,int b,int c)

{

x=a;

y=b;

z=c;

rd=x+y+z;

}

 

}

 

class Class1

{

static void Main(string[] args)

{

CA obj=new CA();

Console.WriteLine("x={0,2} y={1,2} z={2,2}",obj.x,obj.y,obj.z);

CA obj1=new CA(5,7);

Console.WriteLine("x={0,2} y={1,2} z={2,2}",obj1.x,obj1.y,obj1.z);

CA obj2=new CA(5,7,25);

Console.WriteLine("x={0,2} y={1,2} z={2,2}",obj2.x,obj2.y,obj2.z);

Console.WriteLine("поля для чтения{0,2} {1,2} {2,2}",

obj.rd, obj1.rd, obj2.rd);

}

}

}

 

Результат выполнения

x = 3 y = 2 z = 5

x = 5 y = 7 z =12

x = 5 y = 7 z =25