Использование конструкторов для инициализации полей только для чтения
Конструкторы с аргументами
Результат выполнения
Статический конструктор
Для класса можно написать статистический конструктор без параметров (конструктор по умолчанию).
Например:
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