All streams
Search
Write a publication
Pull to refresh
10
0
Каргальцев Михаил @KargaltsevMikhail

Инженер-программист

Send message
Готовлюсь к экзамену по твоим статьям) Спасибо большое за материал, все супер!
Наверное этого не случится )
Нет, так тоже пойдет )
Да, вполне:
interface ICommand
    {
        // some action
        void exec();

        public void build(string description)
        {
            Description = description;
        }

        public string Description { get; set; }
    }
Я считаю что нет. Кажется что то подобное было у Макконнелла: если нам нужно только поведение, мы работаем с интерфейсами. Если нам также нужны и данные, выбор за абстрактными классами.
Скажем, если будем использовать ссылку на интерфейс, то сможем получить доступ к объявленному по умолчанию члену. Но допустим нам не требуется этот функционал, в таком случае нам не нужна ни реализация, ни заглушка.
Да, толстые интерфейсы не есть хорошо, но невсегда расширение интерфейса приводит к размытию его ответсвенности. И в таком случае это все таки может быть полезным…
Допустим у вас есть некий интерфейс, который реализован несколькими класами. В какой то момент вы решили немного расширить интерфейс новым членом(скажем методом). До C# 8 пришлось бы в этих классах либо реализовывать этот новый член, либо ставить заглушку, но в любом случае изменения коснулись бы всех классов реализующих этот интерфейс. Теперь же достаточно добавить для этого нового члена реалицацию по умолчанию(«Default implementations»), не изменяя и не засоряя классы наследующие интерфейс.
Дело в том, что в C# не поддерживается множественное наследование классов. Возможно в этом причина широкого использования интерфейсов во всевозможных паттернах.
Вполне удобно) Мне нравится
Мм… Возможно в классах такое поведение было бы удобным… Но опять же, для класса не всегда хотелось бы иметь все члены с одним модификатором. Допусим в классе с «областью» public мы хотим иметь некий вспомогательный приватный метод и тут выход таков, что бы указывать private явно перед таким методом, что так же вносит некий сумбур в код.
Спасибо за замечание, поправил недоразумение)
Хм. Допустим имеет место модификатор:
protected
для интерфейса:
protected interface ICommand
Ну как то так это должно выглядеть. И все нормально если каждый член имеет реализацию по умолчанию (каждый член будет иметь модификатор доступа интерфейса):
void exec();
{
    return 1;
}
     
void sendNotification(string mes)
{
     Console.WriteLine(mes);
}


Вот только в случае с абстрактными членами возникает сумятится:
protected interface ICommand 
{
	void exec();
	{
		return 1;
	}
     
	void sendNotification(string mes)
	{
		 Console.WriteLine(mes);
	}
	
	void newMethod();
}

Каким должен быть модификатор доступа у «newMethod»?..
Как по мне это все вносит лишнюю сложность)
Возможно, а возможно и нет. Расширять интерфейс не поддерживая классы его реализующие заманчивая возможность)
Возможно такое поведение стерло бы границу между интерфейсом и абстрактным классом)
2

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity