ale*_*eum 3 c# oop generics unity-game-engine
我想在 Unity 编辑器中使用通用类型定义,但(尚)无法更新到本机支持此功能的 Unity 2020.1。解决方法是定义一个扩展泛型类的非泛型类。但是,当我尝试使用基本上是泛型属性的命名版本的定义类覆盖基类属性时,编译器报告两种类型不兼容。由于此描述非常......通用......这里有一些代码来说明我的问题:
class Property<T> { }
class BaseClass<T>
{
public virtual Property<T> Property { protected get; set; }
}
class StringProperty : Property<string> { }
class SubClass : BaseClass<string>
{
public override StringProperty Property { protected get; set; }
}
Run Code Online (Sandbox Code Playgroud)
SubClass.Property': type must be 'Property<string>' to match overridden member 'BaseClass<string>.Property
Run Code Online (Sandbox Code Playgroud)
SubClass.Property 基本上是,Property<string>但我不知道如何将其传达给编译器。
问题是,虽然每个StringProperty都是 a Property<string>,但并非每个Property<string>都是 a StringProperty。听起来怪怪的?所以我们开始了。
想象一下你班的一个客户有这个:
BaseClass<string> b = new SubClass();
Run Code Online (Sandbox Code Playgroud)
现在人们会假设我们可以这样做:
b.Property = new MyProperty();
Run Code Online (Sandbox Code Playgroud)
哪里MyProperty也来自Property<string>。然而,这与您的期望相矛盾,即 的实例SubClass具有 a StringProperty,而不是 a MyProperty。
这与泛型无关。简而言之,您不能通过覆盖来更改成员的签名。基类成员和派生类成员都必须具有完全相同的签名,包括返回类型。