c# - ICodeCompiler,动态代码和静态

发布于 2024-11-03 04:43:14 字数 283 浏览 2 评论 0原文

可以这么说,我有一个“即时”编译和执行 C# 代码的系统。静态类用于保存系统内的配置数据。

如果我从“动态编译代码”中访问静态类 - 一切都可以。

但是,如果我从“动态编译代码”内访问静态类,然后尝试访问“动态编译代码”之外的相同静态类,则静态类中的所有配置数据都已丢失。几乎就像它被重新实例化一样。

如果这有影响的话,“动态编译的代码”会在同一个应用程序域中运行。

谁能解释为什么会发生这种情况? (从编译的代码中访问静态会重置其配置数据)

最好,

本尼

I have a system that compiles and executes c# code "on the fly", so to speak. Static classes are used holding config data within the system.

If I access a static class from within the "on the fly compiled code" - all OK.

However, If I access a static class from within the "on the fly compiled code" then try to access the same static class outside of the "on the fly compiled code", all config data in the static class has been lost. Almost like it has been reinstanciated.

The "on the fly compiled code" is run in the same app domain, if this makes a difference.

Can anyone explain why this occurs? (Accessing a static from within the compiled code resets its config data)

Best,

Benny

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨离汐 2024-11-10 04:43:14

C# 中的 static 与 C 代码中的 static 不同。

我想你想要一个单身人士。

    public sealed class Clazz
    {
        private readonly static Clazz _instance = new Clazz();

        public static Clazz Instance  { get { return _instance; } }

        static Clazz { /* Required for lazy init */ }

        private Clazz()
        {
            // implementation here
        }
    }

它保证 AppDomain 中始终存在该类的一个实例。

如果您要在不同的 AppDomain 中加载动态编译的代码,并且您想要一个跨应用程序域的单例,那么也有解决方案(Google 是您的朋友)。

static in C# is not the same as static in C code.

I think you want a singleton.

    public sealed class Clazz
    {
        private readonly static Clazz _instance = new Clazz();

        public static Clazz Instance  { get { return _instance; } }

        static Clazz { /* Required for lazy init */ }

        private Clazz()
        {
            // implementation here
        }
    }

It guarantees that there is one instance of the class, ever, in an AppDomain.

If you are loading your dynamically-compiled code in a distinct AppDomain, and you want a cross-appdomain singleton, there are solutions for that too (Google is your friend).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文