1
22
这在任何.NET语言中都不可能,因为存在类型安全问题。在类型安全语言中,必须为返回值提供协方差,为参数提供协方差。采用此代码:
对于
对于
在C中,有意识地决定不允许在重载属性时更改类型,即使它们只有一个getter/setter对,因为否则它将具有非常不一致的行为。( 你的意思是,我可以改变一个有getter的类型,但不是一个同时有getter和setter的类型?为什么不呢?“?” --匿名宇宙新手)。 |
2
40
可以重新声明(新建),但不能同时重新声明和重写(使用相同的名称)。 一种选择是使用受保护的方法隐藏细节-这允许多态性和隐藏同时进行:
|
3
11
不,但您可以在2和更高版本中使用泛型:
那么父亲和孩子是同一类的通用版本 |
4
7
|
5
2
您可以为父级和子级创建一个公共接口,并返回该接口的类型。 |
6
1
不,C不支持这个想法(它被称为“返回类型协方差”)。 但是,您可以这样做:
即使用由基类定义的协定,但返回派生类型。我做了一个更详细的样本来说明这一点——再次返回“this”不会改变任何东西。 可以(但很混乱)测试返回的对象的实际类型(即“如果某个对象是ChildProp”),但最好对其调用一个对其类型执行正确操作的虚拟方法。 基类虚拟方法(在本例中是虚拟属性)不仅有一个实现,而且还定义了一个约定:如果子类满足此约定,则它可以提供somepropertyname的不同实现(即somepropertyname返回“fatherprop”类型的对象)。返回从“fatherprop”派生的“childprop”类型的对象符合此合同。但是你不能在“child”中更改契约——这个契约适用于所有从“father”派生的类。 如果您退后一步,看看您的更广泛的设计,在C工具箱中还有其他语言结构,您可能还需要考虑它们——泛型或接口。 |
7
1
最好的解决方案是使用仿制药:
|
8
0
这是我能做到的最接近的(到目前为止):
没有
|
softshipper · 为什么函子实现是可能的? 7 年前 |
azal · 条件分布的均值和协方差 7 年前 |
Ian · 如何找到R中每n行的协方差 7 年前 |
Marcel · C#泛型推断与协方差-错误或限制 7 年前 |
Zac · 协方差混乱。无法将已实现接口的元组分配给元组列表 8 年前 |