partial
взрывает мне мозг 🤯Недавно решил изучить такую возможность C#, как объявление типов данных в разных файлах с помощью ключевого слова
partial
.В коммерческой практике не так часто это встречалось.
И я обнаружил, что с этой фичей можно делать просто супер странные вещи.
Например, у нас есть простенький интерфейс
IConract
:public interface IContract
{
void Foo();
}
Сделаем раздробленный класс
MyPartialClass
:public partial class MyPartialClass
{
// ...
}
И оказывается, что реализацию интерфейса этим классом можно написать вообще в другом файле, и если иметь перед глазами только первый, то об этом и не догадаешься!
public partial class MyPartialClass : IContract
{
public virtual void Foo()
{
throw new NotImplementedException();
}
}
При этом виртуальный метод
Foo
можно спокойно переопределять в той же манере в наследниках:public partial class MyPartialClassDerived : MyPartialClass
{
public override void Foo()
{
Console.WriteLine(this);
base.Foo();
}
}
Опять же, догадаться о существовании подобных членов типа будет достаточно проблематично.
Злоупотреблять таким в командной работе конечно же не рекомендую.
Однако, подобный функционал будет полезен разработчикам решений на основе Source Generators.
Таким образом, можно докидывать компилятором различные бойлерплейты, которые не хочется писать руками.