我正在写一个名字以I开头的类(因为这是我们正在整合的产品的名称 - 不能改变)。
约定声明类名有一个大写字母可以开始,但在这种情况下,它会在消费者看来是一个接口。
是否有任何文档指导开发人员采用正确的方法?另外,如果我确实需要实现和接口会发生什么 - 它应该是IiProduct / IIProduct吗?
编辑添加:
我出于显而易见的原因无法提及该产品,但它遵循与apple相同的大写惯例。 iPhone,因此IPhoneClass(跟随他们的品牌,但显示为接口)而不是IphoneClass(遵循惯例而非品牌)。
答案 0 :(得分:8)
接口以I
作为前缀,然后使用大写字母作为接口名称。因此,界面将为IImposibleProduct
,类将为ImposibleProduct
。
答案 1 :(得分:6)
如果产品名称是例如iPhone
,那么在这种情况下,我会调用类Iphone
来保持类命名的一致性。界面将是IIphone
,看起来不太好,但其含义很明显(按照惯例)。
我确信如果他们认为这是一个界面,那么使用该类的人会更加不安,而不是因为该产品不符合惯例而没有大写。
答案 2 :(得分:2)
如果班级名称以I开头,那么这很好,例如Index
或Idea
都是有效名称。 IIndex
将是一个有效的接口名称。
有关约定的帮助,您可以考虑选择Code Complete的副本,这是许多程序方面的一个惊人的指导来源。
答案 3 :(得分:2)
我遵循这个接口的惯例。
参见示例
interface ICallable{
public void call();
}
ICallable = I + CapitlizeFirstLetter(call + able)
我认为大多数开发人员都遵循这些惯例。从这个角度来看IClass
,IDone
,ICall
,IncomeTax
等不是界面。但IClassable
,ICallable
,ITaxable
等分别是接口。
答案 4 :(得分:0)
你能否破坏类的名称以确保它不以I?
开头通常情况下,您希望不属于单词的I表示接口。以I开头的类名(例如,Interpolator
)很好,并不是特别模糊。
答案 5 :(得分:0)
你可以用“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);
}
}