2016-04-21 99 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"; 
    } 
}