2017-03-01 1 views
0

私はクラスを持ち、UIDをクラスプロパティとして設定しています。これは、プログラム全体で多くのメソッドで使用されており、値を渡す必要がないためです。私が得ている問題は、context.Response.Write(uid)を実行してページを更新すると、毎回同じ値が得られるということです。C#クラスのプロパティがキャッシュされていますか?

createRandomString()context.Response.Write(createRandomString())に移動すると、リロードするたびに新しいUIDが取得されます。

私はC#を使用してPHPのバックグラウンドから来て、これは少し奇妙です。私は、クラスのプロパティを設定するとすべての負荷が変化すると思います。私はおそらくプログラムがコンパイルされるときに何かを持っていると思っていますが、UIDは永久に設定されていても意味をなさないでしょう。プロパティが設定されてばかり

コード:

public class Emailer : IHttpHandler { 
    // Define UID 
    static string uid = createRandomString(); 

CreateRandomStringコード:

public static string createRandomString() { 
    Guid g = Guid.NewGuid(); 
    string GuidString = Convert.ToBase64String(g.ToByteArray()); 
    GuidString = GuidString.Replace("=", ""); 
    GuidString = GuidString.Replace("+", ""); 

    return GuidString; 
} 
+4

あなたuidプロパティは静的プロパティであるため、一度だけではなく、再びアクセスしたときにリフレッシュロード。 – invalidusername

+0

@invalidusernameそれは当時のことです...ページがリロードされるたびにどのようにリセットされないのか分かりません。私は思ったようにコンパイル時に一度設定されますか? –

+0

これは、あなたのフィールド(プロパティではありません)は、メンバを使用して初めてクラスを参照するとき、またはクラスが初めてインスタントされるときに、ただ初期化されることを意味します。これは、通常1回だけ発生します。 – HimBromBeere

答えて

0

フィールドを静的に保ち、ロード時に値を設定することで解決しました。

フィールド:

// Define UID 
static string uid = ""; 

// Define upload path for files 
static string uploadPath = ""; 

設定:

// Define UID 
uid = createRandomString(); 
uploadPath = @"c:\" + uid + @"\"; 
+1

メンバーはなぜ静的である必要があると思いますか?あなたが書いたことから、私は彼らがすべきではないと賭けました。 – HimBromBeere

0

静的フィールドはだけは一度instansiatedあります。それであなたはいつも同じ結果を得るのです。初期化子と

public class Emailer : IHttpHandler 
{ 
    // Define UID 
    string uid => createRandomString(); 
} 

https://msdn.microsoft.com/en-us/library/aa645751(v=vs.71).aspx

+0

私はuidを使ってアップロードパスを別のフィールドに設定しています。どちらも静的ですが、私はここで何ができますか? –

+1

適切でない場合は、静的使用を停止します。 –

0

静的クラスレベルメンバーは初回のみ一度クラス(静的またはそれ以外)のいずれかのmemeberが参照されている...これを試してみてください。

初期化は、クラスが含まれているアセンブリがメモリからアンロードされたとき(たとえば、実行可能ファイルがアンロードされたときなど)にのみ再実行されます。

ASPアプリケーションの場合、アセンブリはIISプロセスによってロードおよびアンロードされるため、IISプロセスを再起動すると(たとえば)、新しいUIDが生成されます。

+0

強制的にすべての負荷でリセットする必要がありますか? –

+1

@JoeScottoそれを静的にしないでください – Nkosi

+0

@JoeScotto、またはそれをプロパティ/フィールドではないメソッドにすることで - public static Guid GetNewOne(){return Guid.NewGuid(); } – SpaceUser7448

関連する問題