Имена классов C #, начинающиеся с I - PullRequest
11 голосов
/ 17 января 2012

Я пишу класс, имя которого начинается с буквы I (потому что это название продукта, с которым мы интегрируемся - не может быть изменено).

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

Есть ли какая-либо документация, направляющая разработчиков на правильный подход здесь?Кроме того, что произойдет, если мне нужно реализовать и интерфейс - это должен быть IiProduct / IIProduct?

Отредактировано, чтобы добавить:

Я не могу упомянуть продукт по очевидным причинам, но он следует зата же конвенция, что и в случае с заглавными буквами.iPhone, поэтому IPhoneClass (следует их брендингу, но выглядит как интерфейс), а не IphoneClass (который следует соглашению, а не брендингу).

Ответы [ 6 ]

8 голосов
/ 17 января 2012

Интерфейс начинается с I в качестве префикса, а затем Имя интерфейса с использованием заглавной буквы. Таким образом, интерфейс будет IImposibleProduct, а класс будет ImposibleProduct.

6 голосов
/ 17 января 2012

Если имя продукта, например, iPhone, то в этом случае я бы назвал класс Iphone, чтобы сохранить соответствие именам классов.Интерфейс будет IIphone, который не выглядит великолепно, но понятен по своему значению (как следует из соглашения).

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

2 голосов
/ 17 января 2012

Я соблюдаю это соглашение для интерфейса.

  1. Найдите наиболее значимый метод в интерфейсе.
  2. Добавить способный суффикс с ним.
  3. Прописная первая буква.
  4. Добавить I префикс

См. Пример

interface ICallable{
    public void call();
}

ICallable = I + CapitlizeFirstLetter (вызов + возможность)

Я думаю, что большинство разработчиков следуют этим правилам. С этой точки зрения IClass, IDone, ICall, IncomeTax и т. Д. Не являются интерфейсом. Но IClassable, ICallable, ITaxable и т. Д. Соответственно являются интерфейсом.

2 голосов
/ 17 января 2012

Если имя класса начинается с I, тогда это нормально, например, Index или Idea являются допустимыми именами.IIndex будет допустимым именем интерфейса.

Для получения справки по соглашениям вы могли бы подумать о том, чтобы взять копию Code Complete , которая является удивительным источником рекомендаций во многих программных аспектах.

0 голосов
/ 17 января 2012

Вы можете обернуть свой класс "плохих" названий имен заглавной буквой "I" в другое имя Например:

    //"Bad" name class
public class IBadClass
{
    public void SomeFuncA(int i)
    {
    }

    public void SomeFunctB(string str)
    {
    }
}

//"Better" name class
public class BetterNameClass
{
    private IBadClass _badClass;

    public BetterNameClass()
    {
        _badClass = new IBadClass();
    }

    public void SomeFuncA(int i)
    {
        _badClass.SomeFuncA(i);
    }

    public void SomeFunctB(string str)
    {
        _badClass.SomeFunctB(str);
    }
}
0 голосов
/ 17 января 2012

Можете ли вы изменить название класса, чтобы убедиться, что он не начинается с I?

Как правило, вы ожидаете, что I, которому не принадлежит к слову обозначает интерфейс.Имя класса, начинающееся с I (например, Interpolator), хорошо и не очень двусмысленно.

...