Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OKR.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
48.11 Кб
Скачать

Interface iMan { string Name { get; set; }

}

public class People : IMan {

private string name; public string Name { get {return name; } set {name = value; } }

public People() {name = «no name»;} }

Головная программа:

People e1 = new People(); e1.Name = “Иванов Иван;” System.Console.WriteLine(«People name: {0}», e1.Name);

8. Модификаторы доступа

Все члены класса - поля, методы, свойства - все они имеют модификаторы доступа. Модификаторы доступа позволяют задать допустимую область видимости для членов класса. То есть контекст, в котором можно употреблять данную переменную или метод. В предыдущей теме мы уже с ними сталкивались, когда объявляли поля класса Book публичными (то есть с модификатором public).

В C# применяются следующие модификаторы доступа:

  • public: публичный, общедоступный класс или член класса. Такой член класса доступен из любого места в коде, а также из других программ и сборок.

  • private: закрытый класс или член класса. Представляет полную противоположность модификатору public. Такой закрытый класс или член класса доступен только из кода в том же классе или контексте.

  • protected: такой член класса доступен из любого места в текущем классе или в производных классах.

  • internal: класс и члены класса с подобным модификатором доступны из любого места кода в той же сборке, однако он недоступен для других программ и сборок (как в случае с модификатором public).

  • protected internal: совмещает функционал двух модификаторов. Классы и члены класса с таким модификатором доступны из текущей сборки и из производных классов.

  • int a; // все равно, что private int a;

  •     private int b; // поле доступно только из текущего класса

  •     protected int c; // доступно из текущего класса и производных классов

  •     internal int d; // доступно в любом месте программы

  •     protected internal int e; // доступно в любом месте программы и из классов-наследников

  •     public int f; // доступно в любом месте программы, а также для других программ и сборок

  •  

  •     private void Display_f()

  •     {

  •         Console.WriteLine("Переменная f = {0}", f);

  •     }

  •  

  •     public void Display_a()

  •     {

  •         Console.WriteLine("Переменная a = {0}", a);

  •     }

  •  

  •     internal void Display_b()

  •     {

  •         Console.WriteLine("Переменная b = {0}", b);

  •     }

  •  

  •     protected void Display_e()

  •     {

  •         Console.WriteLine("Переменная e = {0}", e);

  •     }

  • }

9. Сокрытие имен. Операторы this и base.

В языке C# имеется ключевое слово this, которое обеспечивает доступ к текущему экземпляру класса. Одно из возможных применений ключевого слова this состоит в том, чтобы разрешать неоднозначность контекста, которая может возникнуть, когда входящий параметр назван так же, как поле данных данного типа. Разумеется, в идеале необходимо просто придерживаться соглашения об именовании, которое не может привести к такой неоднозначности.

class MyClass

{

public char ch;

// 2 метода использующие входной параметр ch, при

// этом во втором методе используется ключевое слово this

public void Method1(char ch)

{

ch = ch;

}

public void Method2(char ch)

{

this.ch = ch;

}

}

class Program

{

static void Main()

{

char myCH = 'A';

Console.WriteLine("Исходный символ {0}",myCH);

MyClass obj = new MyClass();

obj.Method1(myCH);

Console.WriteLine("Использование метода без ключевого слова this: {0}", obj.ch);

obj.Method2(myCH);

Console.WriteLine("Использование метода c ключевым словом this: {0}", obj.ch);

Console.ReadLine();

}

}

Ключевое слово base используется для доступа к членам базового класса из производного класса:

  • Вызов метода базового класса, который был переопределен другим методом.

  • Определение конструктора базового класса, который должен вызываться при создании экземпляров производного класса.

Доступ к базовому классу разрешен только в конструкторе, методе экземпляра или методе доступа экземпляра.

Использование ключевого слова base в статическом методе является недопустимым.

Базовый класс, к которому осуществляется доступ, является базовым классом, заданным в объявлении класса. Например, если указать class ClassB : ClassA, члены ClassA будут доступны из ClassB, независимо от базового класса ClassA

public class Person

{

protected string ssn = "444-55-6666";

protected string name = "John L. Malgraine";

public virtual void GetInfo()

{

Console.WriteLine("Name: {0}", name);

Console.WriteLine("SSN: {0}", ssn);

}

}

class Employee : Person

{

public string id = "ABC567EFG";

public override void GetInfo()

{

// Calling the base class GetInfo method:

base.GetInfo();

Console.WriteLine("Employee ID: {0}", id);

}

}

class TestClass

{

static void Main()

{

Employee E = new Employee();

E.GetInfo();

}

}

 производном классе можно определить член с таким же именем, как и у члена его базового класса. В этом случае член базового класса скрывается в производном классе. И хотя формально в C# это не считается ошибкой, компилятор все же выдаст сообщение, предупреждающее о том, что имя скрывается. Если член базового класса требуется скрыть намеренно, то перед его именем следует указать ключевое слово new, чтобы избежать появления подобного предупреждающего сообщения. Следует, однако, иметь в виду, что это совершенно отдельное применение ключевого слова new, не похожее на его применение при создании экземпляра объекта. Ниже приведен пример сокрытия имени. // Пример сокрытия имени с наследственной связью. using System; class А {    public int i = 0; } // Создать производный класс. class В : А {    new int i; // этот член скрывает член i из класса А    public В(int b) {       i = b; // член i в классе В    }    public void Show() {       Console.WriteLine("Член i в производном классе: " + i) ;    } } class NameHiding {    static void Main() {    В ob = new В(2);    ob. Show () ;    } } Прежде всего обратите внимание на использование ключевого слова new в следующей строке кода: new int i; // этот член скрывает член i из класса А В этой строке, по существу, компилятору сообщается о том, что вновь создаваемая переменная i намеренно скрывает переменную i из базового класса А и что автору программы об этом известно. Если же опустить ключевое слово new в этой строке кода, то компилятор выдаст предупреждающее сообщение. Вот к какому результату приводит выполнение приведенного выше кода: Член i в производном классе: 2 В классе В определяется собственная переменная экземпляра i, которая скрывает переменную i из базового класса А. Поэтому при вызове метода Show () для объекта типа В выводится значение переменной i, определенной в классе В, а не той, что определена в классе А.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]