Tag: constructor

如何获取可选参数的默认值?

我有一个带可选参数的构造函数。 我想有一个表达式来调用该构造函数而不提供可选参数(我的意思是让对象使用参数的默认值构造)。 我在这里阅读表达式树可能不包含使用可选参数的调用或调用 ,这是不可能的。 我的意思是 var ctorInfo = getIt; var f = Expression.Lambda<Func>(Expression.New(ctorInfo)).Compile(); 使用System.TypeInitializationException失败。 好的,我会传递默认值。 但是如何获取参数的默认值? ctorInfo.GetParameters().Select(?? 动机:学习目的,没有现实世界的应用。 编辑:编辑表达式树标记,因为它不在构建表达式的上下文中,一般也有效。

我应该使用对象初始值设定项还是构造函数?

我刚刚学习了对象初始化器,并想知道什么时候使用它们的最佳实践。 这是我读到的关于它们的内容: http : //msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx它清楚地表明它们是创建匿名类型所必需的,但我想知道我是否应该在所有其他情况下,尝试将它们更喜欢普通的构造函数。

生成一个带有参数的构造函数,并使用TypeBuilder调用base(argument)

我试图动态创建一个空构造函数,它接受一个参数,并使用TypeBuilder简单地调用base(参数)。 我的代码是这样的: (…) // Create a class derived from this class TypeBuilder typeBuilder = moduleBuilder.DefineType(“NewClass”, TypeAttributes.Class, this.GetType()); ConstructorInfo baseCtor = this.GetType().GetConstructor(new[] { typeof(int) }); // Define new ctor taking int ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new[] { typeof(int) }); // Generate code to call base ctor passing int ILGenerator ctorIL = constructorBuilder.GetILGenerator(); ctorIL.Emit(OpCodes.Ldarg_0); ctorIL.Emit(OpCodes.Ldarg_1); ctorIL.Emit(OpCodes.Call, […]

我可以从派生类的默认构造函数中将参数传递给基础构造函数吗?

假设我有一个抽象基类Deck: public abstract class Deck { public List cards; public Deck(string[] values, string[] suits) {…} … } 和派生类EuchreDeck: public class EuchreDeck : Deck { string[] values = new string[] { “9”, “10”, “J”, “Q”, “K”, “A” }; string[] suits = new string[] { “clubs”, “spades”, “hearts”, “diamonds” }; public EuchreDeck() : base(values, suits) // Error. […]

抽象类,构造函数和公司

好吧,我正在尝试重用一部分C#代码。 它是一个带有UDP服务器的抽象类,可以在这里看到: http://clutch-inc.com/blog/?p=4 我已经创建了一个这样的派生类: public class TheServer : UDPServer { protected override void PacketReceived(UDPPacketBuffer buffer) { } protected override void PacketSent(UDPPacketBuffer buffer, int bytesSent) { } } 在我的应用程序中,我创建了一个派生类的实例,如下所示: TheServer serv = new TheServer(20501); serv.Start(); 但我有错误,我不明白为什么。 请帮忙。 ‘TheProject.TheServer’不包含带’1’参数的构造函数 ‘TheProject.UDPServer.Start()’由于其保护级别而无法访问 ‘TheProject.UDPServer’不包含带’0’参数的构造函数

嵌套类构造函数的可见性

有没有办法限制C#中嵌套类的实例化? 我想防止嵌套类从除嵌套类之外的任何其他类实例化,但允许从其他代码完全访问嵌套类。

添加到构造函数中的只读集合?

是否有ac#language构造允许我将项添加到构造函数中的只读集合属性中? 我想做这样的事情: public class Node{ public IList Children {get; protected set;} public Node(){ Children = new ObservableList(); } } …在我的代码中… var node = new Node {Children.Add(new Node())}; (不是一个很好的例子,但我希望这可以解决这个问题)…… UPDATE 对不起,我需要更清楚。 我没有写这个Node类,我无法改变它。 我问是否有ac#语言概念允许我在第二个片段中的无参数构造函数中添加readonly集合,假设Node类不可更改。

非抽象C#类中的无体构造函数

我正在尝试理解MVC框架中提供的以下类; 看起来这个类应该是抽象的,但它不是,但是这个类编译。 尽管缺少“抽象”关键字,该类实际上是抽象的吗? 我在这里想念的是什么? namespace Microsoft.AspNet.Identity.EntityFramework { public class IdentityUser : IUser { public IdentityUser(); public IdentityUser(string userName); public virtual ICollection Claims { get; } public virtual string Id { get; set; } public virtual ICollection Logins { get; } public virtual string PasswordHash { get; set; } public virtual ICollection Roles { get; } […]

如何在结构构造函数中设置自动属性支持字段的值?

给出这样的结构: public struct SomeStruct { public SomeStruct(String stringProperty, Int32 intProperty) { this.StringProperty = stringProperty; this.IntProperty = intProperty; } public String StringProperty { get; set; } public Int32 IntProperty { get; set; } } 当然,会生成一个编译器错误,读取“this”对象在分配所有字段之前无法使用 。 有没有办法为支持字段或属性本身分配值,还是我必须使用我自己的显式支持字段以老式的方式实现属性?

什么是公共构造函数在C#中的抽象类中的实用性?

如果抽象类中的公共构造函数只能由其派生类调用,则它应该在function上等同于受保护的构造函数。 对? 在抽象类中声明公共构造函数而不是受保护构造函数有什么区别吗? 你会用它做什么用的? 为什么编译器没有投诉?