Tag: 初始化

用reflection实例化不可变对象

我创建了一个基类来帮助我减少C#中不可变对象初始化的样板代码, 我正在使用延迟初始化以尽量不影响性能,我想知道通过这样做我有多大影响性能? 这是我的基类: public class ImmutableObject { private readonly Func<IEnumerable<KeyValuePair>> initContainer; protected ImmutableObject() {} protected ImmutableObject(IEnumerable<KeyValuePair> properties) { var fields = GetType().GetFields().Where(f=> f.IsPublic); var fieldsAndValues = from fieldInfo in fields join keyValuePair in properties on fieldInfo.Name.ToLower() equals keyValuePair.Key.ToLower() select new {fieldInfo, keyValuePair.Value}; fieldsAndValues.ToList().ForEach(fv=> fv.fieldInfo.SetValue(this,fv.Value)); } protected ImmutableObject(Func<IEnumerable<KeyValuePair>> init) { initContainer = init; } protected T […]

如何在初始化期间访问UserControl的XAML设置属性?

我们正在编写自定义UserControl(而不是无形控件),我们需要根据消费者在XAML中控制的属性执行一些初始化。 现在在大多数情况下,您使用Initialized事件(或OnInitialized覆盖),因为在触发时,已应用所有XAML集属性,但在UserControl的情况下,情况并非如此。 触发Initialized事件时,所有属性仍处于默认值。 我没有注意到其他控件,只是UserControls,它们在构造函数中调用InitializeComponent()是不同的,所以作为测试,我注释掉了行并运行代码,果然,这次是在Initialized期间事件,属性设置。 以下是一些代码和测试结果,certificate了这一点…… 在构造函数中调用InitializeComponent的结果: (注意:值仍未设置) TestValue (Pre-OnInitialized): Original Value TestValue (Initialized Event): Original Value TestValue (Post-OnInitialized): Original Value InitializeComponent的结果已完全注释掉: (注意:虽然已设置值,但未加载控件,因为它需要InitializeComponent) TestValue (Pre-OnInitialized): New Value! TestValue (Initialized Event): New Value! TestValue (Post-OnInitialized): New Value! // Event *was* called and the property has been changed 所有这些说,我可以使用什么来初始化我的控件基于XAML中的用户设置属性? (注意:加载已经太晚了,因为到那时控件应该已经初始化了。) XAML片段 TestControl.cs public partial class TestControl : UserControl […]

在C#中,有没有办法为新数据类型编写自定义对象初始值设定项?

在C#中,有“标准”初始化技术{Property1 =“a”,Property2 =“b”},并且有一些特殊的集合变体(列表和字典)。 {value1,value2}和{{“key1”,value1},{“key2”,value2}}。 我想为树数据类型提供一个递归对象初始化器,但我不知道是否有任何方法可以自定义该机制。 我想要一些看起来像s表达的东西。 {item1 {item2 item3 item4} {item5 item6}} 我是通过构造函数来做的,但我想要一个更简洁的语法。

具有可触发初始化的C#Singleton模式

我需要一个单身人士: 很懒 是线程安全的 在施工时加载一些值 可以随时查询这些值 初始化可能在查询开始之前的某个精确时间发生 – 所以我必须能够以某种方式从外部触发它。 当然,多次触发应该只进行一次初始化。 我使用.NET 3.5。 我使用静态子类开始使用Jon Skeet的实现 (第5版): public sealed class Singleton { IEnumerable Values {get; private set;} private Singleton() { Values = new[]{“quick”, “brown”, “fox”}; } public static Singleton Instance { get { return Nested.instance; } } private class Nested { // Explicit static constructor to tell C# […]

在C#中,静态构造函数是为每个对象初始化运行的,还是只运行一次?

在我的类我有一个字符串对象的静态字典,其中包含大量的项目(它从一个文件中读取并初始化它们)我写了一个静态构造函数,这需要几秒钟,但我想做一次为了更快,因为我在ASP.Net中这样做,我希望我的网站不要有这个开销,我该怎么办? 如果这个构造函数为每个对象运行,那么我正在考虑一些方法,但我想我必须在用户运行的网站的每个页面中运行此方法,所以我想再次它会是相同的,我是对的吗? 什么是初始化一大组变量的解决方案? 谢谢

静态变量初始化

今天我与同事讨论并得出以下几点。 如果一切正确或需要进行一些修改,请点亮一些光。 如果未在类中定义静态构造函数,则在使用静态字段之前对其进行初始化。 当在类中定义静态构造函数时,静态字段在其使用之前或作为(之前)实例创建的一部分初始化。 如果在静态方法中没有访问静态字段并且调用静态方法。 只有在该类中定义了静态构造函数时,才会初始化静态字段。 如果可能的话,应该避免在类中使用静态构造函数。

如何在启动时初始化服务器?

我需要在启动服务器时建立一些连接。 我正在将wcf技术用于此客户端 – 服务器应用程序。 问题是服务器的构造函数不会在任何时候被调用,所以暂时我在第一个客户端建立连接时初始化连接。 但这会在另一部分产生问题。 这是我的服务器设置: private static ServiceHost _svc; static void Main(string[] args) { NetTcpBinding binding = new NetTcpBinding(SecurityMode.Message); Uri address = new Uri(“net.tcp://localhost:8000”); _svc = new ServiceHost(typeof(MonitoringSystemService), address); publishMetaData(_svc, “http://localhost:8001”); _svc.AddServiceEndpoint(typeof(IMonitoringSystemService), binding, “Monitoring Server”); _svc.Open(); Console.WriteLine(“Listener service gestart op net.tcp://localhost:8000/Monitoring”); Console.ReadLine(); } private static void publishMetaData(ServiceHost svc, string sEndpointAddress) { ServiceMetadataBehavior smb […]

序列化/反序列化和非默认构造函数

考虑这个课程: [Persistable] public sealed class FileMoveTask : TaskBase { [PersistMember] public string SourceFilePath { get; private set;} [PersistMember] public string DestFilePath { get; private set;} public FileMoveTask(string srcpath, string dstpath) { this.SourceFilePath = srcpath; this.DestFilePath = dstpath; //possibly other IMPORTANT initializations } //code } 我可以通过使用属性PersistMember序列化所有成员来持久保存此类的对象。 但是在反序列化过程中我遇到了一些问题(设计问题)。 特别是,问题在于构造函数中可能存在的“可能的其他重要初始化” ,并且程序员可能决定不会使少数成员可持久化(即不PersistMember添加PersistMember )可能因为这没有意义。 在这种情况下,我如何将对象反序列化为完全相同的状态? 我想,这个问题归结为:我如何调用非默认构造函数,将相同的参数传递给它,之前传递过? 有没有办法做到这一点? 我们可以制定一些可以由编译器强制执行的规则(一种元编程)吗? 构造函数属性可以在这帮助吗?

数组属性初始化

如何初始化数组属性? 试过这个: feeds = new List(); feeds.Add(new Feed() { Names = { “Cluj Approach”, “Cluj Tower” }, Frequencies = { 117.25 } }); 使用Feed类: class Feed { public string[] Names { get; set; } public float[] Frequencies { get; set; } public float Latitude { get; set; } public float Longitude { get; set; } […]

初始化私有成员c#

我有两个私有列表,需要在创建对象时进行初始化。 第二个列表取决于第一个列表。 我能这样做吗: public class MyClass { private List myList = new List(); private ReadOnlyCollection myReadOnlyList = myList.AsReadOnly; … } 第二个列表是第一个只读包装器。 我可以期望c#每次运行时都按此顺序执行这两行吗? 或者我应该将这个初始化放在构造函数中? 编辑: 抱歉愚蠢的问题。 我试过了,编译器说: Error 1 A field initializer cannot reference the non-static field, method, or property…