如果您的函数适用于具有相同实现的许多不同自定义类型,是否可以使用这样的设计模式?:
type1 implicitly casts to type0
type2 implicitly casts to type0
type3 implicitly casts to type0
Operate ( type0 )
并致电:
type1 a
type2 b
type3 c
Operate ( a )
Operate ( b )
Operate ( c )
这种技术有什么问题吗?性能明智,清晰度等?
编辑:同样通过隐式强制转换,我的意思是为类型定制实现的强制转换,没有数据丢失,只是方便。假设您有一个Pixel类,然后将此实例发送到一个方法,该方法使Point2自动将像素转换为Point2。
答案 0 :(得分:3)
这是界面如何运作的基础。
public interface IBlah {
void DoSomething();
}
public class Type1 : IBlah {
void DoSomething() { /* implementation */ }
}
public class Type2 : IBlah {
void DoSomething() { /* implementation */ }
}
public class Type3 : IBlah {
void DoSomething() { /* implementation */ }
}
public class Foo {
void Operate(IBlah blah) {
blah.DoSomething();
}
}
答案 1 :(得分:2)
Casting通常会创建一个新对象,在这种情况下是不必要的
更多的OOP方法是通过基类或接口。
class Type1 : IOperatableType {}
class Type2 : IOperatableType {}
class Type3 : IOperatableType {}
void Operate ( IOperatableType a )
或
class Type1 : Type0 {}
class Type2 : Type0 {}
class Type3 : Type0 {}
void Operate ( Type0 a )
调用方法(在本例中为Operate)取决于使用其参数的方法或属性。如果在所有类型(type1,type2,type3)中定义了这些属性/方法,请考虑使用定义常用功能的接口。如果属性和方法的实现相同,请避免重复代码并考虑从基类继承。
此外,在尝试理解您的代码时,开发人员更有可能首先查看类图,这允许他们查看类之间的关系,或者至少是类定义(将显示基类型和实现的接口)而不是查看(隐式/显式)运算符,以查看哪个类可以转换为哪个类。
答案 2 :(得分:2)
这是一种非常正常的做法。
表现明智,我不相信有任何问题。
清晰明智,因为Intellisense,你也不太可能遇到这个问题。