首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Assembly.GetCallingAssembly()和静态构造函数?

Assembly.GetCallingAssembly() 是一个C#中的方法,用于获取调用该方法的程序集的名称。静态构造函数是一个类型中的特殊方法,它会在类的实例被第一次创建时自动调用。

下面是详细的答案:

静态构造函数

在 C#、Visual Basic 和其他 .NET 语言中,定义静态构造函数以初始化类的成员。静态构造函数的主要优势包括:

  1. 在类的实例被创建时自动调用,因此不需要通过 Main 方法或其他启动代码来调用。
  2. 可以通过重载静态构造函数来自定义实例化时间和初始化参数。
  3. 可以在多个构造函数间共享成员初始化代码。

以下是一个静态构造函数的例子:

代码语言:txt
复制
class Program
{
    static Program()
    {
        // ... 初始化成员 ...
    }
}

Assembly.GetCallingAssembly()

Assembly.GetCallingAssembly() 方法返回调用当前代码所在进程的当前程序集的元数据。当 Main 方法调用您的代码时,它将执行所在的程序集。

以下是一个使用 Assembly.GetCallingAssembly() 的例子:

代码语言:txt
复制
// 获取 Main 方法所在的程序集
var callingAssembly = Assembly.GetCallingAssembly();

// 获取 callingAssembly 的名称
var callingAssemblyName = callingAssembly.GetName().Name;

// 输出 callingAssemblyName
Console.WriteLine("Called from assembly: {0}", callingAssemblyName);

总体而言,这两项功能都是用于在 .NET 程序中创建和使用一些静态初始化代码和元数据,但两者的用途和场景略有不同。总的来说,建议将静态构造函数用于在类实例被创建时自动执行的自定义初始化逻辑,而 Assembly.GetCallingAssembly() 用于获取当前方法的程序集的名称以便能够访问一些公共代码和资源。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 静态块、构造块、构造函数执行顺序

出现继承时: 1.初始化父类的静态变量、静态代码块,初始化的顺序按照出现的顺序。 2.初始化子类的静态变量,静态代码块。 3.初始化父类的成员变量。 4.执行父类的构造函数。...父类$$构造函数$$; n=100 m=50 父类%%静态块%%调用; m=100 父类**构造块**调用;n=10 m=200 父类$$构造函数$$;...n=100 m=210 【 子类 】@@ 静态块 @@调用; m=212 父类**构造块**调用;n=10 m=424 父类$$构造函数$$; n=100...**构造块**调用;n=10 m=40 父类$$构造函数$$; n=100 m=50 父类%%静态块%%调用; m=100 父类**构造块**调用;n=10 m=200 父类$$构造函数$...%%静态块%%调用; m=10 父类**构造块**调用;n=10 m=20 父类$$构造函数$$; n=100 m=30 【 子类 】@@ 静态块 @@调用; m=32 父类**构造

1.7K30

Java 静态代码块,构造代码块,构造函数执行顺序

具体说,静态代码块是由类调用的。...类调用时,先执行静态代码块,然后才执行主函数的,总的来说,静态代码块是类一起的,优先级最高,类加载的同时,静态代码块同时也执行,但只执行一次,所以作用一般是用来加载一些配置代码,或者加载某些文件配置。...构造函数 构造函数的作用是用于给对象进行初始化,对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。 构造代码块 构造代码块的作用同样是给对象进行初始化。...构造函数构造代码块的区别: 构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象...也就是说,构造代码块中定义的是不同对象共性的初始化内容。 运行结果: 可以看出来,静态代码块只执行一次,而每次创建对象都会调用共同的构造代码块,而构造函数也只在创建对象时执行该对象的构造函数

78310

java的静态属性,静态块,构造函数的执行顺序

今天为了搞清楚实例化一个对象时其属性等的实例化顺序,写了下面的例子来探究: 实例化一个C的对象,其中,A为其静态属性,B为其普通属性;D为C的父类,E为D的静态属性,F为D的普通属性;C中还包含了静态代码块普通代码块.../** * 静态代码块先于构造器执行 普通块先于构造块 只执行一次 * 凡是静态的与对象无关,先于对象存在的; 凡是静态的都是共享的 */ B b = new B(); static...public C(){ System.out.println("构造函数C"); } } 运行结果: -------第1次实例化------- 父类的静态属性E 构造静态属性A 静态代码块...父类的普通属性F 构造父类D 构造普通属性B 普通代码块 构造函数C -------第2次实例化------- 父类的普通属性F 构造父类D 构造普通属性B 普通代码块 构造函数...C 结论(实例化顺序): 父类静态的属性 父类静态的代码块 子类静态的属性 子类静态的代码块 父类普通属性 父类普通代码块 父类构造函数 子类普通属性 子类普通代码块 子类构造函数 静态的东西只在第一次实例化的时候执行

1.1K60

工厂函数构造函数

---- theme: channing-cyan 这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战 工厂函数 工厂模式是一种设计模式,说白了就是一种简单的函数,这个函数可以创建对象,为它添加属性方法...,在实际开发中,我们用构造函数的频率一般会大于用工厂函数的频率。...(4) 执行构造函数内部的代码(给新对象添加属性)。 (5) 如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。...构造函数虽然好用,但是也有一些问题,我们分析一下逻辑 上面的例子,person1person2都有一个sayName()方法,但这俩个方法却不是同一个function实例,相当于这里定义的方法sayName...因为这一次 sayName 属性中包含的只是一个指向外部函数的指针,所以 person1 person2共享了定义在全局作用域上的 sayName()函数

72020

js 中的构造函数构造函数作用,构造函数普通函数的区别

之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数的主要 功能为 初始化对象,特点是new 一起使用。new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性方法。...以上就是构造函数的整个执行过程。 3、用new不用new调用构造函数,有什么区别? 1、用new调用构造函数函数内部会发生如下变化: 创建一个this变量,该变量指向一个空对象。...6、 构造函数普通函数的区别 1、构造函数也是一个普通函数,创建方式普通函数一样,但构造函数习惯上首字母大写。 2、调用方式不一样。...(ES6 中 class 与构造函数的关 系,通过class定义的类 通过构造函数定义的类 二者本质相同。并且在js执行时,会将第一种转会为第二种执行。...所以 ES6 class的写法实质就是构造函数) 4、内部用this 来构造属性方法 5、构造函数的执行流程 A、立刻在堆内存中创建一个新的对象 B、将新建的对象设置为函数中的this C、

3.4K10

静态代码块、构造代码块以及构造函数的加载顺序

构造代码块,构造函数都存在于一个类中,只不过,他们执行的先后顺序执行的次数不同。...构造函数构造函数的命名必须类名完全相同,它没有返回值,也不能用void来修饰。 执行顺序优先级:静态块>main()>构造块>构造方法。...加载的时候,将静态成员变量(类变量),构造代码块,静态代码块以及静态方法加载到方法区的静态部分,非静态方法以及构造方法加载到方法区的非静态部分。...接着开始在堆内存中对实例变量进行默认初始化, 然后执行构造代码块,对object进行对应的构造代码块的初始化, 最后进行构造函数的初始化,对object进行对应的构造函数初始化。...作用分析 静态代码块用于给类初始化,类加载的时候就会被执行; 构造代码块用于给对应对象初始化,只要创建对象就会被执行,而且执行的顺序优先于构造函数构造函数用于给对应对象初始化,只要创建对象,就会选择相应的构造函数进行初始化

71220

构造函数原型

③执行构造函数里面的代码,给这个新对象添加属性方法。 ④返回这个新对象(所以构造函数里面不需要return ) ....静态成员实例成员 JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this.上添 加。通过这两种方式添加的成员,就分别称为静态成员实例成员。...静态成员:在构造函数本上添加的成员称为静态成员,只能由构造函数本身来访问 实例成员:在构造函数内部创建的对象成员称为实例成员,只能由实例化的对象来访问 2.1实例成员 实例成员就是构造函数内部通过...2.2静态成员 静态成员 在构造函数本身上添加的成员 如下列代码中 sex 就是静态成员,静态成员只能通过构造函数来访问 function Star(uname, age) {     this.uname...构造函数实例原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的

47550

构造函数原型

1.构造函数原型 1.1对象的三种创建方式--复习 字面量方式 var obj = {}; new关键字 var obj = new Object(); 构造函数方式...function Person(name,age){ this.name = name; this.age = age; } var obj = new Person('zs',12); 1.2静态成员实例成员...静态成员 在构造函数本身上添加的成员 如下列代码中 sex 就是静态成员,静态成员只能通过构造函数来访问 function Star(uname, age) { this.uname =...prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性方法,就是因为对象有 __proto__ 原型的存在。...1.8构造函数实例原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的

35210

dotnet 谨慎在静态构造函数里使用锁

在 dotnet 的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的多线程相关的锁的使用。最佳做法是尽量不要在静态构造函数里面碰到任何锁以及多线程安全相关的逻辑。...的 this 就分别属于不同的两个对象 然而静态构造函数就比较复杂起来的,大家都知道,在没有标记线程静态的前提下,所有的静态字段属性等都是全局共享的,全局共享的就意味着所有的线程都访问到的相同的对象...如此能很大解决因为静态构造函数的时机问题导致的问题,无论什么时候碰到静态构造函数,如果静态构造函数只是做非常简单的无依赖的逻辑,那自然是没有什么问题 而如果是如本文要聊的,在类型的静态构造函数里面,碰到了锁...不过这是一个很大的话题,本文只来大家聊锁与静态构造函数。在使用锁的时候,能带来的优势是提供了一个解决多线程安全问题的方法,带来的问题是多线程安全问题。...再加上一些代码优化内联,将会导致调试下发布下的行为也会不同。再加上代码迭代,静态构造函数的触发时机也是很难进行控制的。

59910

构造函数析构函数

声明定义构造函数 由于本类中有三个数据成员,如果要设置commpany成员,将其他成员设置为0 Stock(const string &co,long n = 0,double pr 0.0); /...= 0; } else { share = n; share_val = pr; set_tot(); } } 上述代码成员函数...为类定义了构造函数后,我们就必须提供默认构造函数,如果只提供了非默认构造函数而没有提供默认构造函数 Stock s1;//这种调用默认构造函数将会出错 如果要创建对象且不显式地初始化,则必须定义一个不接受任何参数的默认构造函数...什么时候会调用析构函数呢,如果是静态存储类对象,析构函数将会在程序结束后自动调用,如果是new出来的,则当delete时候,会调用析构函数,所以程序必须提供一个析构函数,编译器将隐式地声明一个默认析构函数...构造函数不仅仅可以初始化新对象,还可以给已存在的对象重新赋值,上面第二种是一样的。main函数调用完之后,会调用析构函数,因为是存储在栈中的对象,所以先进后出,先清理后创建的对象。

20730

Java中静态代码块、构造代码块、构造函数、普通代码块

③、构造代码块的作用    构造函数的作用类似,都能对对象进行初始化,并且只要创建一个对象,构造代码块都会执行一次。...利用每次创建对象的时候都会提前调用一次构造代码块特性,我们可以做诸如统计创建对象的次数等功能。 3、构造函数    1.构造函数的命名必须类名完全相同。...在java中普通函数可以构造函数同名,但是必须带有返回值;   2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。...6、父类子类执行顺序   对象的初始化顺序:   首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有构造代码块,如果有就执行父类的构造代码块...子类的构造代码块执行完毕再去执行子类的构造方法。   总之一句话,静态代码块内容先执行,接着执行父类构造代码块构造方法,然后执行子类构造代码块构造方法。

1.4K20

Java中静态代码块、构造代码块、构造函数、普通代码块

位置:位于类内,是一个作用特殊的方法 public class Test { public Test(){ //Code... } }  构造函数构造代码块的区别是,所有构造代码块在每个对象创建的时候都会执行...%d个执行\n", ++i); } } 控制输出: 静态代码块代码块第1个执行 执行main方法 构造代码块第2个执行 构造函数第3个执行 普通代码块第4个执行 执行顺序:  静态代码块->...构造代码块->构造函数->普通代码块 注意事项: 普通代码块可以嵌入其余任何一个代码块中,且前三代码块内部代码都是顺序执行的; main方法晚于静态代码块执行,但是main内部的方法其余三个代码块是顺序执行的...子类的静态代码块第3个执行 父类的父类的构造函数第4个执行 父类的构造函数第5个执行 子类的构造函数第6个执行  根据Demo-2代码实验可知,涉及继承的代码块执行顺序是这样的:  父类的静态方法->...子类的静态方法->父类的构造代码块->父类的构造函数->子类的构造代码块->子类的构造函数 相关原理以及解释: 因为static修饰的代码在类加载的时候就进行执行,而类加载是先于对象创建的,所以子类父类的静态方法要首先执行

1.6K20

为什么不允许使用 Java 静态构造函数

不允许使用 Java 静态构造函数,但是为什么呢?在深入探讨不允许使用静态构造函数的原因之前,让我们看看如果要使 构造函数静态化 会发生什么。...**仅允许公开,受保护私有**。 [zhtwu6wcpq.png] 静态属于类,构造函数属于对象 我们知道静态方法,静态块或变量属于该类。...而构造函数属于该对象,并在使用 new 运算符创建实例时调用。由于构造函数不是类属性,因此有理由认为它不能是静态的。 静态块 / 方法无法访问非静态变量 我们知道静态方法不能访问非静态变量。...静态块也是如此。 现在,构造函数的主要目的是初始化对象变量。因此,如果我们将构造函数设置为静态,则无法初始化对象变量。这将破坏使用创建对象的构造函数的全部目的。因此,使构造函数为非静态是合理的。...我们可以使用静态块以及构造函数本身来初始化静态变量。

3K80

静态代码块、非静态代码块、构造函数三者执行顺序

主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序。 如有错误,欢迎指出。 首先: 静态成员变量和静态代码块的优先级是一样的,先定义的先执行。...在创建一个对象的时候会执行非静态代码块构造函数 再者是执行顺序: /* * *(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。...* *(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 * *(3)父类实例成员实例初始化块,按在代码中出现的顺序依次执行。 * *(4)执行父类构造方法。...* *(5)子类实例成员实例初始化块,按在代码中出现的顺序依次执行。 * *(6)执行子类构造方法。...2.在创建一个对象的时候会执行非静态代码块构造函数

47520

C++构造函数 | 构造函数

class Time {   public:   day;   hour;   minute; }; Time time={25,19,54}; 上述对象结构体变量的初始化是差不多的,在一个花括号内顺序列出各公用数据成员的值...C++构造函数的作用 C++提供了构造函数来处理对象的初始化,构造函数是一 种特殊的成员函数,与其他成员函数不同,不需要程序员来调用它,而是在建立对象时自动执行。...构造函数的名字必须与类名同名,而不能由程序员任意命 ,以便编译系统能识别它并把它作为构造函数处理,构造函数不具有任何类型,不返回任何值,它的功能是由程序员定义,程序员根据初始化的要求设计函数函数参数...关于构造函数,以下5点需要读者注意:  在类对象进入其作用域时调用构造函数构造函数没有返回值,不需要在定义构造函数时声明类型。 构造函数不需要程序员调用,也不能被程序员调用。...如果用户自己没有定义构造函数,则C++编译系统会自动生成一个构造函数,只是这个构造函数函数体是空的,也没有参数,不执行初始化操作。

2.2K74
领券