- •Обзор
- •Цели
- •Что необходимо запомнить
- •Абстрактные базовые классы
- •Абстрактные базовые классы - пример
- •Интерфейсы
- •Интерфейсы – пример
- •Интерфейсы – пример
- •Интерфейсы – пример с наследованием
- •Интерфейсы – пример с наследованием
- •Многоинтерфейсные
- •Многоинтерфейсные реализации - пример
- •Явная реализация интерфейса
- •Наследование
- •Резюме
Интерфейсы
Интерфейсы являются чистыми “pure” абстрактными базовыми класами
Они могут содержать только абстрактные методы, но не должны содержать реализаций методов
Класс, который реализует данный интерфейс, обязан обеспечить реализацию
функций-членов, перечисленных в
public interface IFile
Интерфейсе{
int delFile(); void disFile();
}
.NET Framework and C# Programming Language \ Chapter 5 \ 12 o
Интерфейсы – пример
public class MyFile : IFile
{
public int delFile()
{
System.Console.WriteLine("DelFile Implementation!"); return(0);
}
public void disFile()
{
System.Console.WriteLine("DisFile Implementation!");
}
}
class Test
{
static void Main()
{
MyFile objMyFile = new MyFile(); objMyFile.disFile();
int retValue = objMyFile.delFile();
}
}
.NET Framework and C# Programming Language \ Chapter 5 \ 13 o
Интерфейсы – пример
Если мы объединим два последних фрагмента
кода и скомпилируем их, то получим результат
выполнения:
Рассмотрим еще один пример:
public class BaseforInterface
{
public void open()
{
System.Console.WriteLine("This is the open method of BaseforInterface");
}
}
.NET Framework and C# Programming Language \ Chapter 5 \ 14 o
Интерфейсы – пример с наследованием
public class MyFile : BaseforInterface, IFile
{
public int delFile()
{
System.Console.WriteLine("DelFile Implementation!"); return(0);
}
public void disFile()
{
System.Console.WriteLine("DisFile Implementation!");
}
}
class Test
{
static void Main()
{
MyFile objMyFile = new MyFile(); objMyFile.disFile();
int retValue = objMyFile.delFile(); objMyFile.open();
}
}
.NET Framework and C# Programming Language \ Chapter 5 \ 15 o
Интерфейсы – пример с наследованием
Результат выполнения:
.NET Framework and C# Programming Language \ Chapter 5 \ 16 o
Многоинтерфейсные
реализации
C# позволяет многоинтерфейсные реализации т.е. класс может реализовать более одного интерфейса.
public interface IFileTwo
{
void applySecondInterface();
}
.NET Framework and C# Programming Language \ Chapter 5 \ 17 o
Многоинтерфейсные реализации - пример
public class MyFile : BaseforInterface, IFile, IFileTwo
{public int delFile()
{ System.Console.WriteLine("DelFile Implementation!");
return(0); } public void disFile()
{System.Console.WriteLine("DisFile Implementation!"); } public void applySecondInterface()
{System.Console.WriteLine("ApplySecondInterface Implementation!"); }
}
class Test
{static void Main()
{MyFile objMyFile = new MyFile(); objMyFile.disFile();
int retValue = objMyFile.delFile(); objMyFile.open(); objMyFile.applySecondInterface();
}
}
.NET Framework and C# Programming Language \ Chapter 5 \ 18 o
Явная реализация интерфейса
Явная реализация интерфейса может быть использована, когда методы с
одинаковым именем содержится в 2
public interface IFile
{int delFile();
void disFile(); } public interface IFileTwo
{void applySecondInterface(); void disFile();}
public class MyFile : BaseforInterface, IFile, IFileTwo |
|
|
{... |
|
|
void IFile.disFile() |
|
|
{ |
System.Console.WriteLine("IFile Implementation of DisFile"); |
} |
void IFileTwo.disFile() |
|
|
{ |
System.Console.WriteLine("IFileTwo Implementation of DisFile"); |
|
} |
|
|
...
}
.NET Framework and C# Programming Language \ Chapter 5 \ 19 o
Наследование
интерфейсов
Можно создавать новые интерфейсы, объединяя и комбинируя другие, уже
существующие, интерфейсы.
interface IAllFile : IFile, IFileTwo
{
//More operations can be added if necessary
//(apart from that of IFile & IFileTwo)
}
.NET Framework and C# Programming Language \ Chapter 5 \ 20 o
Резюме
Виртуальные функции удобны в случае необходимости вызова метода производного класса из объекта базового класса.
Различие между замещением и полиморфизмом заключается в том, что при использовании полиморфизма решение о вызове того или иного метода принимается во время выполнения программы.
Абстрактные базовые классы – это классы, которые могут содержать как абстрактные члены (методы без реализации), так и неабстрактные члены. Метод без реализации в C# называется
операцией (operation).
Интерфейс – это чистый абстрактный базовый класс. Он может содержать только абстрактные методы, но не должен содержать исходного кода реализации.
Класс может реализовать более одного интерфейса; фактически, класс может являться производным от другого класса и одновременно выполнять реализацию интерфейса (одного или нескольких).
.NET Framework and C# Programming Language \ Chapter 5 \ 21 o