Эффективный вес (как во время проектирования, так и во время выполнения и т. Д.) Методов расширения - PullRequest
1 голос
/ 03 марта 2010

Мне было интересно, каков эффективный вес методов расширения, если они используются очень дико.

Если, например, я решу создать множество методов расширения string / int / datetime для многих распространенных повседневных задач, чтобы в результате получить своего рода свободный интерфейс, может случиться так, что общий вес накачал бы чрезмерно? И если да, будет ли это во время разработки (например, слишком большой объем IntelliSense db) или во время выполнения или в обоих случаях? Или никто из них?

Чтобы избежать огромного количества методов, предложенных IntelliSense везде, я думал о том, чтобы поместить их в отдельное пространство имен, такое как «MyCompany.PathExtensions» или «MyCompany.DateTimeExtensions» или даже все в причудливом «MyCompany.FluentEverywhere» или похож ...

Пример того, о чем я говорю:

DateTime d;
d = 23.Minutes().FromNow();
d = "14".ToIntOr(0).IsBetween(10,20).IfFalseThrow(new Exception("foo"));

String finalPath;
// This will give you "c:\foo\bar\"
finalPath = "c:\\".AppendPath("foo").AppendPath("bar").EnsureTrailingBackslash();

String finalUrl;
// This will give you "ftp://mycompany.com/foo/bar"
finalPath = "mycompany".EnsureDomainExtensionOr("com").AppendPath("foo/bar").EnsureTrailingSlashNotThere().EnsureProtocolOr("ftp");

И так далее ... О, и не сходите с ума от таких вещей, как .IfFalseThrow(...), они были просто примерами.

Что вы думаете? Помимо использования, которое приятно или не зависит от вкуса, могут быть проблемы, связанные с общим весом?

Ответы [ 2 ]

3 голосов
/ 03 марта 2010

каков эффективный вес методов расширения

Точно так же, как эффект от использования статических методов . Методы расширений не больше, не меньше, чем просто статические методы, обернутые синтаксисом C #, которые выглядят как обычные методы.

2 голосов
/ 03 марта 2010

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

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

Как вы сказали, все зависит от внешнего вида / цепочки и т. Д., Но для производительности ничего не добавляется при использовании метода расширения для чего-то .

...