Tag: 构造函数

从静态基类方法调用子类构造函数

好的……在Objective C中,您可以使用’new this()’从基类中的静态方法创建子类,因为在静态方法中,’this’指的是类,而不是实例。 当我第一次发现它并且我经常使用它时,这是一个非常酷的发现。 但是,在C#中不起作用。 该死的! 那么……任何人都知道如何在静态基类方法中“新建”子类? 这样的东西…… public class MyBaseClass{ string name; public static Object GimmeOne(string name){ // What would I replace ‘this’ with in C#? return new this(name); } public MyBaseClass(string name){ this.name = name; } } // No need to write redundant constructors public class SubClass1 : MyBaseClass{ } public class SubClass2 […]

C#在类构造函数中分配类属性有什么好处吗?

例如,如果我有这样的类: namespace Sample { public Class TestObject { private Object MyAwesomeObject = new MyAwesomeObject(); } } 设置它是否有任何好处,以便在这样的构造函数中设置属性? namespace Sample { public Class TestObject { private Object MyAwesomeObject; public TestObject() { MyAwesomeObject = new MyAwesomeObject() } } }

如何使用C#从派生类中的构造函数中捕获exception?

我想知道如何使用C#从派生类中的构造函数中捕获exception。 这样的东西: public class MyClassA { public MyClassA() { //Do the work if (failed) { throw new Exception(“My exception”); } } } public class MyClassB : MyClassA { public MyClassB() { //How to catch exception from a constructor in MyClassA? } }

如果没有无参数构造函数,C#/ MEF不适用于基类

我有一个Prim类,它为MEF实现了一个IPrimitiveDecomposer接口并inheritance了Node基类。 public class Node { public Node() { } } public interface IPrimitiveDecomposer { bool Match(Node node); } [Export(typeof(IPrimitiveDecomposer))] public class Prim : Node, IPrimitiveDecomposer { public bool Match(Node node) {return true;} } 但是,当我inheritance一个没有无参数构造函数的类时,MEF的ComposeParts()方法无法导入Prim对象。 我在MSDN中添加了此页面之后的ImportingConstructor属性,因为我收到了没有该属性的编译错误。 [Export(typeof(IPrimitiveDecomposer))] public class Prim : Node, IPrimitiveDecomposer { [ImportingConstructor] public Prim(int val) : base (val) {} public bool Match(Node node) […]

.ctor是不明确的,因为类中存在多个具有此名称的成员

我正在复制我所面临的情况。 假设我们有一个程序集,C#类为: public class Program { int n = 0; public void Print() { Console.WriteLine(n); } public Program() { } public Program(int num = 10) { n = num; } } 我们在VB.NET项目中引用上面的程序集并尝试创建Program类的实例: Module Module1 Sub Main() Dim p As New Program() p.Print() p = New Program(20) p.Print() Console.ReadLine() End Sub End Module VB.NET项目没有编译,给出错误: ‘.ctor’含糊不清,因为“ConsoleApplication2.Program”类中存在多种具有此名称的成员。 从错误消息我们可以看到VB.NET编译器不确定要调用哪个构造函数 […]

通过构造函数链传递IDisposable对象

我有一个小的对象层次结构,通常是从Stream数据构造的,但是对于某些特定的子类,可以从更简单的参数列表中合成。 在从子类链接构造函数时,我遇到了一个问题,即确保处理基类构造函数所需的合成流。 它没有逃过我的说法,这种方式使用IDisposable对象可能只是脏池(plz建议?),原因我没有考虑过,但是,除了这个问题外,它似乎相当简单(并且封装良好)。 代码: abstract class Node { protected Node (Stream raw) { // calculate/generate some base class properties } } class FilesystemNode : Node { public FilesystemNode (FileStream fs) : base (fs) { // all good here; disposing of fs not our responsibility } } class CompositeNode : Node { public CompositeNode (IEnumerable some_stuff) […]

带有可选参数的构造函数违反new()约束

我有一个这个构造函数的类: public Currency(Guid? vcurrencyUI = null) : base(vcurrencyUI) { } 我想使用new()约束这个类,但我收到此错误: ‘Currency’必须是具有公共无参数构造函数的非抽象类型,才能在generics类型或方法中将其用作参数’T’… 如果我拆分构造函数一切正常: public Currency(Guid? vcurrencyUI) : base(vcurrencyUI) { } public Currency() : base() { } 为什么我需要拆分构造函数?

如何使构造函数只能由基类访问?

如果我想要一个只能从子类访问的构造函数,我可以在构造函数中使用protected关键字。 现在我想要相反的。 我的子类应该有一个构造函数,可以通过其基类访问,但不能从任何其他类访问。 这有可能吗? 这是我目前的代码。 问题是子类有一个公共构造函数。 public abstract class BaseClass { public static BaseClass CreateInstance(DataTable dataTable) { return new Child1(dataTable); } public static BaseClass CreateInstance(DataSet dataSet) { return new Child2(dataSet); } } public class Child1 : BaseClass { public Child1(DataTable dataTable) { } } public class Child2 : BaseClass { public Child2(DataSet dataSet) { } […]

为什么我得到“不包含带0参数的构造函数”错误? C#

在我的表单加载,我有这个代码: private void Form1_Load(object sender, EventArgs e) { CharityCyclists cyclist1 = new CharityCyclists(); CharityCyclists cyclist2 = new CharityCyclists(“a”, 1, “Finished”, 0, 0, 0, “One Wheel”, 1, 500); cyclist1.Type = “Novelty Charity Cyclist”; cyclist1.Number = 1; cyclist1.Finished = “Not Finished”; cyclist1.Hours = 0; cyclist1.Mins = 0; cyclist1.Secs = 0; cyclist1.Bicycle = “Tricycle”; cyclist1.Wheels = 3; cyclist1.FundsRaised […]

C# – 单例模式

正如你从我的昵称中看到的那样,我是新手,实际上是在学习Singleton模式,我遇到了一个问题。 在我了解到静态构造函数总是在标准构造函数之前执行之前,但在下面的代码中,结果是不同的,首先我看到“Insta”字符串然后是“静态”,为什么会发生? sealed class Singleton { private static readonly Singleton instance; private Singleton() { Console.WriteLine(“Insta”); } static Singleton() { instance = new Singleton(); Console.WriteLine(“Static”); } public static Singleton Instance { get { return instance; } } } class Program { static void Main() { Singleton s1 = Singleton.Instance; } }