2015-08-07 2 views
5

Я начать использовать следующий метод группировки, чтобы сделать мой код более читабельным:Возвращение себя в собственности

public interface IUserMethodGroup 
{ 
    void SomeMethodOne(); 
    String SomeMethodTwo(); 
} 

//File MainClass.Users.cs 
public partial class MainClass : IUserMethodGroup 
{ 
    void IUserMethodGroup.SomeMethodOne(){ //some code } 
    String IUserMethodGroup.SomeMethodTwo(){ return "some str";} 
} 

//File MainClass.cs 
public partial class MainClass 
{ 
    //HOW ABOUT PERFORMANCE? 
    public IUserMethodGroup UserHandle {get { return this; } }  
} 

делает это оказывает большое влияние на производительность?

Edit 1

Это позволит мне сделать это:

class ConsumerClass 
{ 
    public void Method() 
    { 
     MainClass mc = new MainClass(); 

     mc.UserHandle.SomeMethodOne(); 

     //@ vc 74: 
     //Interface has to be explicitly, otherwise it will be: 
     ms.SomeMethodOne(); //grouping lost... 
    } 
} 

@adelphus: Рассмотрим У меня есть 5 схожие свойства (метод групп). Каждый раз, когда я хочу использовать какой-либо метод из группы I, я возвращаюсь к классу. Это намного медленнее по сравнению с реализацией без групп?

+3

По сравнению с тем, что ...? – adelphus

+6

Независимо от того, какое влияние оно может иметь или не иметь, оно почти наверняка незначительно по сравнению с реальными узкими местами вашего приложения. –

+1

Если ваш вопрос: «Частичные классы создают проблемы с производительностью?» то ответ - нет, структура не имеет представления о том, что ваш класс является частичным. Это всего лишь компилятор C#, поэтому производительность будет похожа на не частичный класс. –

ответ

1

Каждый раз, когда я хочу использовать какой-либо метод из группы, я прошу класс возвратиться. Это намного медленнее по сравнению с реализацией без групп?

Нет. Возврат this в свойство только для чтения должен быть только одной строкой кода IL. На самом деле это может быть даже встроено оптимизатором JIT.

Большой вопрос: почему у вас так много методов на одном классе? Наличие так много методов, что их нужно «организовывать» с помощью явных реализаций интерфейса, пахнет, как будто у вас есть класс, который делает слишком много.

Одна вещь эта конструкция действительно позволяет для вас, чтобы иметь различные классы, которые реализуют различные «группы». Затем ваш единственный класс становится агрегатором, который объединяет функциональность нескольких разных интерфейсов в один класс.

+0

Благодарим вас за ответ. Я использую его, например, в реализации DbContext. Группировка общих наборов: адрес (улицы, города, почтовые индексы, регионы, районы), учетная запись (группы, пользователи, роли ...) и т. Д. Это более удобно для меня. – arche89

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