• 《C#高级编程》读书笔记(十三):应用程序域


        在.NET之前的技术中,进程作为独立的边界来使用,每个进程都有其私有的虚拟内存;运行在一个进程的应用程序不能写入另一个应用程序的内存,也不会因为这种方式破坏其他应用程序。该进程用作应用程序之间的一个独立而安全的边界。.NET体系结构应用程序有一个新的边界:应用程序域。使用托管IL代码,运行库可以确保在同一个进程中程序不能访问另一个应用程序的内存。多个应用程序可以运行在一个进程的多个应用程序域中。

        AppDomain类用于创建和终止应用程序域,加载、卸载程序集和类型,以及枚举应用程序域中的程序集和线程。

        1,ExcuteAssembly()方法

        首先,创建一个C#控制台应用程序AssemblyA

    using System;
    
    namespace AssemblyA
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine($"Main in domain {AppDomain.CurrentDomain.FriendlyName} called");
            }
        }
    
        public class Demo
        {
            public Demo(int val1, int val2)
            {
                Console.WriteLine($"Constructor with the values {val1},{val2} in domain " +
                                  $"{AppDomain.CurrentDomain.FriendlyName} called");
            }
    
        }
    }

    运行:Main in domain AssemblyA.exe called

        然后创建第二个应用程序AssemblyB.exe

    using System;
    
    namespace AssemblyB
    {
        class Program
        {
            static void Main(string[] args)
            {
                AppDomain currentDomain = AppDomain.CurrentDomain;
                Console.WriteLine(currentDomain.FriendlyName);
                AppDomain seconDomain = AppDomain.CreateDomain("New AppDomain");
                seconDomain.ExecuteAssembly("AssemblyA.exe");
                //seconDomain.CreateInstance("AssemblyA", "AssemblyA.Demo", true,BindingFlags.CreateInstance, null,new object[] {7,3},null,null );
            }
        }
    }

    运行:

    AssemblyB.exe
    Main in domain New AppDomain called

        2,CreateInstance()方法

        可以用CreateInstance()方法替代ExcuteAssembly()方法,它的第一个参数是程序集名AssemblyA,第二个参数定义了应实例化的类型AssemblyA.Demo,第三个参数true表示不区分大小写。System.Reflection.BindingFlags.CreateInstance是一个绑定的标志枚举值,用来指定调用的构造函数:

    seconDomain.CreateInstance("AssemblyA", "AssemblyA.Demo", true,BindingFlags.CreateInstance, null,new object[] {7,3},null,null );

    运行:

    AssemblyB.exe
    Constructor with the values 7,3 in domain New AppDomain called

  • 相关阅读:
    网络存储系统NSS基准性能测试(7.10)
    Design and Model Analysis of the ECommerce Development Platform for 3Tiered Web Applications
    网络存储系统NSS基准性能测试(7.24)
    Android雁翎刀之ImageView之哈哈镜
    Android雁翎刀之ImageView之舞动乾坤
    Android雁翎刀之ImageView之异步下载
    网络存储系统NSS基准性能测试(7.17)
    freeradius源码安装及相关问题解释
    解决linux乱码显示的问题
    在ubtunu使用aptget安装和配置freeradius
  • 原文地址:https://www.cnblogs.com/khjian/p/5714829.html
Copyright © 2020-2023  润新知