Questa interfaccia IConvertible
soddisfa il principio di segregazione dell'interfaccia (ad esempio "I" in SOLID )?
Ecco la definizione:
public interface IConvertible
{
TypeCode GetTypeCode();
bool ToBoolean(IFormatProvider provider);
byte ToByte(IFormatProvider provider);
char ToChar(IFormatProvider provider);
DateTime ToDateTime(IFormatProvider provider);
decimal ToDecimal(IFormatProvider provider);
short ToInt16(IFormatProvider provider);
int ToInt32(IFormatProvider provider);
long ToInt64(IFormatProvider provider);
sbyte ToSByte(IFormatProvider provider);
float ToSingle(IFormatProvider provider);
string ToString(IFormatProvider provider);
object ToType(Type conversionType, IFormatProvider provider);
ushort ToUInt16(IFormatProvider provider);
uint ToUInt32(IFormatProvider provider);
ulong ToUInt64(IFormatProvider provider);
}
Quindi, se mi piacerebbe avere una classe che implementerà questa interfaccia IConvertible
, devo implementare tutti questi metodi, giusto? O se non li implemento tutti, allora devo almeno fare un metodo vuoto o lanciare un'eccezione, giusto?
Secondo me, il modo migliore è rendere più interfacciabile con meno metodi, ad esempio:
public interface IConvertibleInt
{
short ToInt16(IFormatProvider provider);
int ToInt32(IFormatProvider provider);
long ToInt64(IFormatProvider provider);
}
O anche:
public interface IConvertibleInt16
{
short ToInt16(IFormatProvider provider);
}
public interface IConvertibleInt32
{
int ToInt32(IFormatProvider provider);
}
public interface IConvertibleInt64
{
long ToInt64(IFormatProvider provider);
}
Il mio ragionamento è corretto?