我有这样的课程
public class A: SomeClass
{
public TimeZoneInfo Timezone { get; set; }
public A()
{
Timezone = TimeZoneInfo.Utc;
}
}
我有另一个这样的课:
public class B: A
{
public string Timezone { get; set; }
public B()
{
}
}
现在,我想覆盖B类中TimeZone属性的返回类型。
我怎样才能做到这一点?
答案 0 :(得分:2)
无法覆盖返回类型,因为返回类型是方法的签名/属性类型的固定部分的一部分。但是,您可以使用关键字new
执行方法/属性隐藏并更改返回类型:
public new string Timezone { get; set; } //note the new keyword
此外,如果您要覆盖,则应将virtual
关键字放在原始(基准)class
中,并在派生override
中使用class
关键字:< / p>
public class A: SomeClass
{
public virtual TimeZoneInfo Timezone { get; set; } //note virtual keyword
public A()
{
Timezone = TimeZoneInfo.Utc;
}
}
public class B: A
{
public override TimeZoneInfo Timezone { get; set; } //note override keyword, return type is not changed
public B()
{
}
}
答案 1 :(得分:0)
通常不可能这样做,但在某些情况下,可以使用泛型来实现:
public class A<T>
{
public T { get; set;}
public A() {};
}
public class B: A<TimeZone>
{
public B() {};
public void Whatever()
{
T.UtcOffset = 47;
}
}
public class C: A<string>
{
public C() {};
public void Whatever()
{
T = "47";
}
}