zoukankan      html  css  js  c++  java
  • 《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

  • 相关阅读:
    DFS搜索算法--(1)基础图遍历 绝对看!的!懂!
    C++;STL--队列与栈;
    Unity VR-播放demo模型后无法移动视角
    自律
    链表-简单练习题2-数据结构实验之链表二:逆序建立链表
    链表-简单练习题1-数据结构实验之链表一:顺序建立链表 SDUT2117
    链表--笔记
    leetcode--Binary Tree Maximum Path Sum
    leetcode--Single Number II
    leetcode--Single Number
  • 原文地址:https://www.cnblogs.com/khjian/p/5714829.html
Copyright © 2011-2022 走看看