2011-07-24 14 views
0

GameTimeをTimeSpanに変換するために余分なメソッドが必要であるため、C#でSystem.TimeSpanを拡張しようとしています。これは私が試みたものです:XNAの基本継承C#

class TimeSpanner : TimeSpan 
{ 
} 

また、Timespanの構造体を拡張することはできません。誰もそれが拡張できない理由を知っていますか?そして、どうすればこの作品を適切に作れますか?

答えて

2

あなたは完全に間違ったアプローチをとっています。 GameTimeには、GameTimeオブジェクトを構成する2種類の異なるメンバープロパティElapsedGameTimeTotalGameTimeがあります。

protected override void Update(GameTime gameTime) 
{ 
    TimeSpan elapsed = gameTime.ElapsedGameTime; 
    TimeSpan total = gameTime.TotalGameTime; 

    // Personally, I just do this: 
    float seconds = (float)gameTime.ElapsedGameTime.TotalSeconds; 

    // ... 
} 
1

structから継承することはできません。 structs

フォームMSDNは:クラスのためにそこにあるよう

構造体のための継承はありません。構造体は他の構造体やクラスから継承することはできません。クラスの基底にすることはできません。ただし、Structsは基本クラスObjectから継承します。構造体はインターフェースを実装でき、それはクラスとまったく同じです。

extension methodsを使用することを検討してください。

1

TimeSpanはstructであり、構造体(値型)はサブクラス化できません。おそらく演算子を使用して変換を実行することを検討する必要があります。あなたはこのような何か行うことができます

public static implicit operator TimeSpan(GameTime gt) 
{ 
    return gt.GetTimeSpan(); 
} 

をあなたは、このように、これを使用することもできます。

TimeSpan timeSpan = (TimeSpan)myGameTime; 
+0

このルートを使用する場合、変換は暗黙的ではなく明示的に指定する必要があります。 –

+1

この変換演算子はどこに配置しますか? 'TimeSpan'と' GameTime'は両方ともフレームワーククラス(.NETとXNA)です。 –

1

あなたが変換を行うための余分な方法が必要な場合は、なぜ単に拡張子をしません方法?

public static void DoStuff(this TimeSpan timeSpan, GameTime gameTime) 
{ 
    ... 
} 
+2

指定した拡張メソッドは、変換には適していません。 –

関連する問題