覆盖属性返回类型,C#

时间:2016-04-21 13:11:48

标签: c# .net oop

我有这样的课程

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属性的返回类型。

我怎样才能做到这一点?

2 个答案:

答案 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";
     }
}
相关问题