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.



Таким образом, можно докидывать компилятором различные бойлерплейты, которые не хочется писать руками.