2017-11-22 5 views
0

私のwinformアプリケーションでは、プロジェクト全体でタイムスタンプ値からDateTimeオブジェクトに変換する必要があります。だから、これは私がやったことです:Winform(C#)でグローバル関数を使用中にCS0120エラーが発生しました

public class UnixTool { 
    public DateTime Unix2Time(Int64 timeStamp, TimeZoneInfo LocalTimeZone) { 
     return TimeZoneInfo.ConvertTimeFromUtc(baseTime.AddSeconds(timeStamp), LocalTimeZone); 
    } 

    public Int64 Time2Unix(DateTime dateTime, TimeZoneInfo LocalTimeZone) { 
     return (Int64)(TimeZoneInfo.ConvertTimeToUtc(dateTime, LocalTimeZone).Subtract(baseTime).TotalSeconds); 
    } 
} 

そして、他のクラスでは、私のようなUnix2Timeメソッドを使用しようとしました:

DateTime dt = UnixTool.Unix2Time(localTimeStampValue, localTimeZone); 

しかし、それはエラーが発生しました:

CS0120:オブジェクト参照非静的フィールド、メソッド、またはプロパティに必要です。 'UnixTools.Unix2Time(long、TimeZoneInfo)'

私はこの問題を解決するのですか?私のプログラムで何が原因なのですか?

+2

staticとして関数を宣言する – BugFinder

+0

これらのメソッドを 'static'宣言する必要があります。 'public static DateTime Unix2Time'と' public static Int64 Time2Unix' –

+1

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods – mjwills

答えて

0

あなたはこのような静的メソッドと静的クラスを使用する必要があります。

public static class UnixTool { 
    public static DateTime Unix2Time(Int64 timeStamp, TimeZoneInfo LocalTimeZone) { 
     return TimeZoneInfo.ConvertTimeFromUtc(baseTime.AddSeconds(timeStamp), LocalTimeZone); 
    } 

    public static Int64 Time2Unix(DateTime dateTime, TimeZoneInfo LocalTimeZone) { 
     return (Int64)(TimeZoneInfo.ConvertTimeToUtc(dateTime, LocalTimeZone).Subtract(baseTime).TotalSeconds); 
    } 
} 

クラスは静的である必要がありません。

+0

ありがとうございましたVSはクラスが静的である必要があると言っています – GreenRoof

+0

これはbaseTimeプロパティのためです(私は、BaseTimeプロパティはUnixToolクラスにあります)。 baseTimeプロパティをstaticに設定すると、クラスを静的にせずにこのソリューションを使用できます。 – Tor

+0

ああそう...私は 'baseTime'が何だったのか忘れていて、クラスのプロパティです。どうもありがとう! – GreenRoof

0

あなたはstaticとしてUnix2Timeを宣言する必要があります。

public static DateTime Unix2Time(Int64 timeStamp, TimeZoneInfo LocalTimeZone) 

Time2Unixをだけでなく、あなたが同じ行動をしたい場合。

デフォルトでは、C#のメソッドは周囲のクラスのインスタンスを必要とします。

関連する問題