GameTimeをTimeSpanに変換するために余分なメソッドが必要であるため、C#でSystem.TimeSpanを拡張しようとしています。これは私が試みたものです:XNAの基本継承C#
class TimeSpanner : TimeSpan
{
}
また、Timespanの構造体を拡張することはできません。誰もそれが拡張できない理由を知っていますか?そして、どうすればこの作品を適切に作れますか?
GameTimeをTimeSpanに変換するために余分なメソッドが必要であるため、C#でSystem.TimeSpanを拡張しようとしています。これは私が試みたものです:XNAの基本継承C#
class TimeSpanner : TimeSpan
{
}
また、Timespanの構造体を拡張することはできません。誰もそれが拡張できない理由を知っていますか?そして、どうすればこの作品を適切に作れますか?
あなたは完全に間違ったアプローチをとっています。 GameTime
には、GameTime
オブジェクトを構成する2種類の異なるメンバープロパティElapsedGameTime
とTotalGameTime
があります。
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;
// ...
}
struct
から継承することはできません。 structs上
フォームMSDNは:クラスのためにそこにあるよう
構造体のための継承はありません。構造体は他の構造体やクラスから継承することはできません。クラスの基底にすることはできません。ただし、Structsは基本クラスObjectから継承します。構造体はインターフェースを実装でき、それはクラスとまったく同じです。
extension methodsを使用することを検討してください。
TimeSpanはstruct
であり、構造体(値型)はサブクラス化できません。おそらく演算子を使用して変換を実行することを検討する必要があります。あなたはこのような何か行うことができます
:
public static implicit operator TimeSpan(GameTime gt)
{
return gt.GetTimeSpan();
}
をあなたは、このように、これを使用することもできます。
TimeSpan timeSpan = (TimeSpan)myGameTime;
あなたが変換を行うための余分な方法が必要な場合は、なぜ単に拡張子をしません方法?
public static void DoStuff(this TimeSpan timeSpan, GameTime gameTime)
{
...
}
指定した拡張メソッドは、変換には適していません。 –
このルートを使用する場合、変換は暗黙的ではなく明示的に指定する必要があります。 –
この変換演算子はどこに配置しますか? 'TimeSpan'と' GameTime'は両方ともフレームワーククラス(.NETとXNA)です。 –