Названия классов С#, начинающиеся с I

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

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

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

Отредактировано для добавления:

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

  • Найдите наиболее важный метод в интерфейсе.
  • Добавьте в него суффикс.
  • Загладить первую букву.
  • Добавить префикс I

См. пример

interface ICallable{
    public void call();
}

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Вы можете обернуть свой "плохой" названный класс имен буквой "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);
    }
}