C# class 属性 正在缓存?

C# class property getting cached?

我有一个 class 并且正在将 UID 设置为 class 属性 因为它在整个程序的许多方法中使用而且我不想继续必须传递一个值给它。我遇到的问题是,当我 运行 context.Response.Write(uid) 并刷新页面时,我每次都得到相同的值。

如果我将 createRandomString() 移动到 context.Response.Write(createRandomString()),我每次重新加载时都会得到一个新的 UID。

我对使用 C# 很陌生,而且我有 PHP 背景,这对我来说有点奇怪。我认为设置 class 属性 会改变每个负载。我认为这可能与程序编译时有关,UID 是永久设置的,这仍然没有意义。

设置 属性 的代码:

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

创建随机字符串代码:

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

    return GuidString;
}

静态字段只实例化一次。这就是为什么你总是得到相同的结果。试试这个...

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

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

具有初始化程序的静态 class 级别成员仅在首次引用 class 的任何成员(静态或其他)时出现一次。

只有当 class 所在的程序集从内存中卸载时(例如,当可执行文件被卸载时),初始化才会重新 运行。

对于 ASP 应用程序,程序集由 IIS 进程加载和卸载,因此如果您重新启动 IIS 进程(例如),这将导致生成新的 UID。

通过保持字段静态但在加载时设置值来解决它。

字段:

// Define UID
static string uid = "";

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

设置:

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