Названия классов С#, начинающиеся с 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);
}
}