2016-04-21 103 views
0

我上课喜欢这个重写属性返回类型,C#

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

我该如何做到这一点?

+0

为什么你想这样做? –

回答

2

返回类型不能被覆盖,因为返回类型是方法签名/属性类型的固定部分的一部分。你可以,但是,做方法/属性隐藏和使用关键字new改变返回类型:

public new string Timezone { get; set; } //note the new keyword 

另外,如果你想要做的压倒一切的,你应该把virtual关键字原来(基地)class和使用override关键字在派生class

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() 
    { 
    } 
} 
+0

倒数第三个问题,关于“为什么我的代码不是时区”在三,二,一... –

+0

我知道如何重写,如果返回类型相同。我问,如果这些不同,是否有可能?我需要这个,因为当我试图获取所有的财产时,我发现了两个不同的属性。这很明显。当我获取我只需要字符串类型TimeZone。 – abidsplanet

+0

并感谢您的合作@Ian – abidsplanet

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"; 
    } 
}