2010-03-03 3 views

ответ

11

Это полезно для улучшения синтаксиса кода в методе/класса, но вы не хотите, чтобы выставить функциональные возможности, предлагаемые этим методом расширения до другие области кодовой базы. Другими словами, в качестве альтернативы для обычных частных статических вспомогательных методов

+0

Я не совсем понял, что вы сказали, что первый раз, когда я его прочитал, в основном потому, что я стараюсь избегать больших вспомогательных классов, где имеет смысл статический класс-помощник, после того, как я подумал, что ваш ответ правильный. +1 –

8

Рассмотрим следующий пример:

public class MyClass 
{ 
    public void PerformAction(int i) { } 
} 

public static class MyExtensions 
{ 
    public static void DoItWith10(this MyClass myClass) 
    { 
     myClass.DoIt(10); 
    } 

    public static void DoItWith20(this MyClass myClass) 
    { 
     myClass.DoIt(20); 
    } 

    private static void DoIt(this MyClass myClass, int i) 
    { 
     myClass.PerformAction(i); 
    } 
} 

Я понимаю, что пример не имеет особого смысла в его нынешнем виде, но я уверен, что вы можете оценить возможности, что частные методы расширения обеспечивают, а именно способность имеют общедоступные методы расширения, которые используют частное расширение для инкапсуляции или композиции.

+0

hm, я предполагаю, что мы не захотим менять MyClass, иначе вы могли бы использовать функцию DoIt как обычную функцию в MyClass. Но опять же, почему функция DoIt вообще, если DoItWith20 может вызвать сам PerformAction –

+0

@ThanosPapathanasiou MyClass может быть кодом, к которому у вас нет доступа. например сторонняя сборка – Dolbz

+0

@ThanosPapathanasiou: Я знаю, что этот пример идеален с логической точки зрения, но это было то, что я мог придумать в спешке. Однако это иллюстрирует, что частные методы расширения не бессмысленны. –

Смежные вопросы