Продолжаем совершенствовать наши классы A и B. Очередная задача – выяснить способы передачи управления конструктору базового класса при создании объекта-представителя производного класса.
using System;
/*private*/ class X
{
}
/*public*/ class A
{
public A(){val2_A = 0; val3_A = 0;}
// К этому конструктору также можно обратиться из производного класса.
protected A(int key):this() {val1_A = key;}
// А вот этот конструктор предназначен исключительно
// для внутреннего использования.
private A(int key1,int key2,int key3){val1_A = key1; val2_A = key2; val3_A = key3;}
public int val1_A = 0;
public void fun1_A (String str)
{
Console.WriteLine(“A’s fun1_A:” + str);
this.fun2_A(“private function from A:”);
fun3_A();
}
private void fun2_A (String str)
{
Console.WriteLine(str + “A’s fun2_A:” + val2_A.ToString());
}
protected int val3_A;
private void fun3_A ()
{
A a = new A(1,2,3);
a.fun2_A(“Это наше внутреннее дело!”);
}
}
/*public*/ class B:A
{
public B():base(){val1_B = 0;}
public B(int key):base(key){val1_B = key;}
}
class Class1
{
static void Main(string[] args)
{
B b0 = new B(125);
}
}
Таким образом, в программе для создания объектов можно применять конструкторы трёх степеней защиты:
public – при создании объектов в рамках данного пространства имён, в методах любого класса-члена данного пространства имён,
protected – при создании объектов в рамках производного класса, в том числе при построении объектов производного класса, а также для внутреннего использования классом-владельцем данного конструктора,
private – применяется исключительно для внутреннего использования классом-владельцем данного конструктора.