public interface ITestInterface
{
void Func(int par);
}
internal class Calc
{
ITestInterface inter;
}
Я думал, что интерфейсы сами в себе бесполезны, если только от них не наследуются, также думал что нельзя создать экземпляр интерфейса. Как может применяться такая конструкция?
Здравствуйте, conceal_blaze, Вы писали:
_>Я думал, что интерфейсы сами в себе бесполезны, если только от них не наследуются, также думал что нельзя создать экземпляр интерфейса. Как может применяться такая конструкция?
В переменной или поле, типом которых является интерфейс, может находиться null или ссылка на экземпляр класса (или упакованную структуру), реализующего этот интерфейс. Экземпляры интерфейсов создавать нельзя.
Здравствуйте, nikov, Вы писали:
N>В переменной или поле, типом которых является интерфейс, может находиться null или ссылка на экземпляр класса (или упакованную структуру), реализующего этот интерфейс. Экземпляры интерфейсов создавать нельзя.
То есть это будет использоваться как-то так:
public interface ITestInterface
{
void Func(int par);
}
internal class Calc
{
ITestInterface inter;
}
public class NewClass : ITestInterface
{
int i;
void Func(int par)
{
i = par;
}
}
class Programm
{
static void main(string[] args)
{
Calc objCalc = new Calc();
NewClass objNewClass = new NewClass();
objCalc.inter = objNewClass;
objCalc.inter.Func(5);
}
}
Спасибо. Правда если посмотреть на код, то видно что в конечном итоге изменяется объект типа NewClass. Можно было бы просто у экземпляра данного класса вызвать наследуемую от интерфейса функцию напрямую. Возможность есть, осталось придумать где применить )
Здравствуйте, conceal_blaze, Вы писали:
_>Спасибо. Правда если посмотреть на код, то видно что в конечном итоге изменяется объект типа NewClass. Можно было бы просто у экземпляра данного класса вызвать наследуемую от интерфейса функцию напрямую. Возможность есть, осталось придумать где применить )
При разработке класса, использующего интерфейс, ты можешь не знать, экземпляр какого именно класса там будет в рантайм, и тем не менее ты будешь работать с ним типобезопасным образом. Более того, этот класс может быть еще не написан, и будет находится в другой сборке и будет создаваться совершенно другим разработчиком (который может не иметь доступа к твоему классу вообще, а доступ к интерфейсу иметь только в скомпилированном, бинарном виде). Это называется — отделение контракта (или интерфейса) от реализации.
Здравствуйте, nikov, Вы писали:
N>При разработке класса, использующего интерфейс, ты можешь не знать, экземпляр какого именно класса там будет в рантайм, и тем не менее ты будешь работать с ним типобезопасным образом. Более того, этот класс может быть еще не написан, и будет находится в другой сборке и будет создаваться совершенно другим разработчиком (который может не иметь доступа к твоему классу вообще, а доступ к интерфейсу иметь только в скомпилированном, бинарном виде). Это называется — отделение контракта (или интерфейса) от реализации.