Tag: default constructor

使用C#中的reflection检测编译器生成的默认构造函数

我的目标是.NET 3.5 SP1,我正在使用CommentCheckervalidation我的XML文档,一切正常,直到我进入这样的类: /// /// documentation /// public sealed class MyClass { /// /// documentation /// public void Method() { } } 在上面的例子中,据我所知,编译器为我的类生成一个默认构造函数。 这样做的问题是CommentChecker会生成警告,告诉我构造函数缺少注释。 我试图修改程序以检测这种特殊情况并忽略它,但我卡住了,我已经尝试过IsDefined(typeof(CompilerGeneratedAttribute), true)但是没有用。 简而言之,我如何使用reflection检测默认构造函数?

C# – 调用具有所有默认参数的结构构造函数

今天我在创建一个包含大量数据的struct时遇到了这个问题。 这是一个例子: public struct ExampleStruct { public int Value { get; private set; } public ExampleStruct(int value = 1) : this() { Value = value; } } 看起来很好,花花公子。 问题是当我尝试使用此构造函数而未指定值并希望将参数的默认值1使用时: private static void Main(string[] args) { ExampleStruct example1 = new ExampleStruct(); Console.WriteLine(example1.Value); } 此代码输出0并且不输出1 。 原因是所有结构都具有公共参数构造函数。 所以,就像我在Main调用this()我的显式构造函数一样, new ExampleStruct()实际调用ExampleStruct()但不调用ExampleStruct(int value = 1)时会发生同样的事情。 因为它这样做,它使用int的默认值0作为Value 。 更糟糕的是,我的实际代码是检查int value […]

结构初始化和默认参数的非直观行为

public struct Test { public double Val; public Test(double val = double.NaN) { Val = val; } public bool IsValid { get { return !double.IsNaN(Val); } } } Test myTest = new Test(); bool valid = myTest.IsValid; 上面给出了valid==true因为没有调用默认arg的构造函数,并且使用标准默认值val = 0.0创建对象。 如果struct是一个类,行为是valid==false ,这是我所期望的。 我发现行为的这种差异,特别是结构案例中的行为令人惊讶和不直观 – 发生了什么? stuct构造的默认arg服务是什么? 如果它无用为什么要让这个编译? 更新:澄清这里的重点不在于行为是什么 – 而是为什么在没有警告的情况下进行编译并且行为不直观。 即如果未应用默认arg,因为在新的Test()情况下没有调用构造函数,那么为什么要让它编译?

可以在C#中使用带有非默认构造函数的单例吗?

我正在为我的一个项目实现一个通知框架。 由于我希望它非常通用,用户可以使用多个传输层,因此他并不需要关心使用一种传递方法(比方说WCF)或另一种(例如ActiveMQ)。 用户可以访问的界面当然与传递方法(WCF或ActiveMQ)无关。 尽管如此,这两个类(使用者和生产者)实现了单例,因此它们实际上使用默认构造函数(意思是没有参数)。 我的问题是,我想有一个参数,用户想要使用的交付方法。 但据我所知,单身人士只使用默认构造函数? 这是正常的,因为没有必要使用带参数的单例。 那么,我的选择是什么? 不创造单身人士? 创建一个设置交付方式的方法? 非常感谢您的帮助, 塞巴斯蒂安

为什么String类没有无参数构造函数?

int和object有一个无参数构造函数。 为什么不string ?

设计没有默认构造函数

我想使用默认构造函数限制创建对象。 因为我有如下设计: class Program { static void Main(string[] args) { BaseClass bc = new BaseClass(“”,””); XmlSerializer xml = new XmlSerializer(typeof(BaseClass)); StreamWriter sw = new StreamWriter(File.Create(“c:\\test.txt”)); xml.Serialize(sw,bc); sw.Flush(); sw.Close(); } } [Serializable] public class BaseClass { public string UserName, Password; // I don’t want to create default constructor because of Authentication public BaseClass(string _UserName, string _Password) […]

在C#中从类外部访问私有构造函数

如果我使用私有默认构造函数和具有参数的公共构造函数定义类,如何访问私有构造函数? public class Bob { public String Surname { get; set; } private Bob() { } public Bob(string surname) { Surname = surname; } } 我可以通过类上的静态方法访问私有构造函数,如下所示: public static Bob GetBob() { return new Bob(); } 我认为我可以通过扩展方法访问私有构造函数,因为(根据我的理解)扩展方法被翻译,以便它们看起来是类上的静态方法,但我不能: static class Fred { public static Bob Bobby(this Bob bob) { return new Bob(); } } 那么,我如何访问私有构造函数? 谢谢 编辑: […]

使用默认构造函数初始化数组

public class Sample { static int count = 0; public int abc; public Sample() { abc = ++Sample.count; } } 我想创建一个上面的类数组,并希望通过调用默认构造函数来初始化数组中的每个元素,这样每个元素都可以有不同的abc 。所以我这样做了: Sample[] samples = new Sample[100]; 但这并不符合我的想法。 这似乎是默认构造函数没有被调用。 如何在创建数组时调用默认构造函数? 我也想知道上面的陈述是做什么的?