静态构造函数: (1)用于对静态字段、只读字段等的初始化。 (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。 (3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数 (4)静态构造函数是不可继承的,而且不能被直接调用。 (5)如果类中包含用来开始执行的 Main 方法,则该类的静态构...
我有一个控制台应用程序,它引用了许多dll.控制台应用程序需要实例化这些dll中的对象.这些dll具有我想要注入其构造函数的依赖项.我的要求是在控制台应用程序中进行所有注册 – 它是组合根.我可以做到这一点,但是如何在不传递/引用UnityContainer的情况下将这些注册持久存储到库中? 我想避免服务定位器模式,纯粹使用构造函数/方法注入.如果可能的话,这些都不是:_container.Resolve<IData>() // not what I want这是我在控制台应用...
如果我有以下类,是否可以从Autofac注册中排除复制构造函数?public class A {public A() {}public A(A other) { // copy constructor }public A(int b) { // some other stuff } }基本上,我希望autofac解析默认构造函数,或者如果用户请求Func< int,A>第三个构造函数.我从不希望autofac解析复制构造函数.这可能吗? 这样做的原因是,当我尝试使用Autofac注入一个Func< A>时,它会导致循环依赖,因为Autofac正在尝试使用第二个构造函数(...
我想调用一个struct的构造函数,它具有所有参数的默认值.但是当我调用MyRectangle的无参数构造函数时,一个未定义的构造函数被调用.这是为什么?是否有可能没有从我创建的构造函数调用?using System;namespace UebungClasses {class Program{static void Main(string[] args){MyRectangle sixRec = new MyRectangle(3, 2);MyRectangle oneRec = new MyRectangle();Console.WriteLine("area of six: " + sixRec.Area() + " area of o...
我班上有2个构造函数:public class VuelingCacheWebServices : IVuelingCacheWebService{public IVuelingCache apiConnector { get; set; }public VuelingCacheWebServices(IVuelingCache ApiConnector){apiConnector = ApiConnector;}public VuelingCacheWebServices(): this(new VuelingCache()){ }}如您所见,我有一个构造函数,具体取决于IVuelingCache和一个默认构造函数,它创建一个传递给第一个构造函数的实例.这是对的吗?通...
我刚从Ninject更改为TinyIoC以进行依赖注入,而我在构造函数注入方面遇到了麻烦. 我已设法将其简化为此代码段:public interface IBar { } public class Foo {public Foo(IBar bar) { } }public class Bar : IBar {public Bar(string value) { } }class Program {static void Main(string[] args){var container = TinyIoCContainer.Current;string value = "test";container.Register<IBar, Bar>().UsingConstructor(() => new Bar...
如果C#派生的IDisposable类构造函数生成错误,如何处置已经完全构造的IDisposable基类? 由于类层次结构中的所有字段都是在任何构造函数执行之前初始化的,因此派生构造函数调用base.Dispose()是否安全?它违反了在完全构造对象之前不调用虚方法的规则,但我想不出另一种方法,并且我的搜索没有发现任何关于这种情况.解决方法:我的观点是构造函数应该是轻量级的,而不是依赖于可能引发异常的外部资源/等.构造函数应该做足以验证可以安全...
我正在编写C#程序,而VisualStudio的VSTO向导会生成以下代码.private static string GetResourceText(string resourceName) {Assembly asm = Assembly.GetExecutingAssembly();string[] resourceNames = asm.GetManifestResourceNames();for (int i = 0; i < resourceNames.Length; ++i){if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0){using (StreamReader resourceReader = new ...
每个应用程序域的静态构造函数为guaranteed to be run only once.在创建第一个实例或引用任何静态成员之前自动调用它.CLR如何保证这一点?假设有两个线程访问一个同时具有静态构造函数的类.这两个线程都是第一次.如下:class SomeType {Static SomeType(){Console.Write("hello");} }因此,由于同时性,CLR如何保证控制台只写一次?使用锁或其他东西?解决方法:CLR在进入静态构造函数之前取出一个锁,以保证它只由一个线程执行一次. 如...
我花了一些时间记录自己的依赖注入和IoC,但我还没有找到解决问题的方法. 我的问题涉及在使用依赖容器时对象的实例化,因为它创建了对构造函数的参数的依赖.在我遇到的几乎每个例子中,具体类的构造函数都没有任何参数.它使一切都变得“简单”.因此我的问题在这里. 我们举一个例子:我需要从两个源A和B下载一些数据.源A包含各种格式的数据;例如csv和xml.我们不需要为源B指定这样的东西. 这是一些代码(请注意我尽可能地简化代码来说明我...
我一直在尝试的代码和出错的地方:http://ideone.com/cvLRLgusing System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 {public class Minion{public static int manaCost;public static int attack;public static int health;public static string cardText;public Minion(int mana, int atk, int h, string txt){manaCost = mana;attack = atk;health = h;cardText...
回答好的,所以添加E-Bat给出的建议代码没有任何影响,直到我开始一个新项目并逐字复制所有代码.我只能假设在http://prismlibrary.com/上的ViewModelLocator中必须有一些后台代码,它们没有更新以考虑无参数构造函数.希望这可以帮助其他人解决同样的问题 原始问题我使用棱镜设置了一个MVVM项目.我有一个MainWindow.xaml和5个视图;我正在使用的ButtonsView,HeaderView,ProcessInputView,ProcessLogView和ProcessSelectionView,每个View...
请考虑以下代码:class Data {public string Name;public string NameWithSufix; }class Behaviour {private Data data;public string Name { get { return data.Name; } private set { } }public Behaviour(){data = new Data(){Name = "My Name",NameWithSufix = Name + " Sufix",};//data = new Data();//data.Name = "My Name";//data.NameWithSufix = Name + " Sufix";} }class Program {static void Main(string[] args){Beh...
在使用Linq to Sql时,我创建了一个单独的类来将数据传送到网页.为了简化创建这些渡轮对象,我要么使用专门的构造函数,要么使用显式转换运算符.我有两个问题. 从可读性的角度来看,哪种方法更好? 第二,虽然生成的clr代码对我来说似乎是相同的,但是在某些情况下编译器会处理一个不同于另一个的情况(在lambda等中). 示例代码(DatabaseFoo使用专门的构造函数,BusinessFoo使用显式运算符):public class DatabaseFoo {private static int...
我有以下代码片段:public abstract class Foo {protected Foo() }使用protected作为访问修饰符或公共使用之间的继承有什么区别吗? 我在这种情况下大多看到使用受保护.所以有区别,为什么人们使用公众保护?解决方法:可能存在一些微妙的情况,它会产生影响(并且可以通过反射检测到),但基本上它们是相同的.使它受保护可能更清楚,因为它实际上不能被派生类的构造函数调用.