Tag: 构造函数

为什么我们不能在派生类中使用带参数的构造函数

为什么这不可能? 在使用constructor-parameter实例化“DerivedClass”时,我得到以下编译器错误: ‘GenericParameterizedConstructor.DerivedClass’不包含带有1个参数的构造函数 但调用一个非常相似的方法是有效的 为什么? class Program { static void Main(string[] args) { // This one produces a compile error // DerivedClass cls = new DerivedClass(“Some value”); // This one works; DerivedClass cls2 = new DerivedClass(); cls2.SomeMethod(“Some value”); } } public class BaseClass { internal T Value; public BaseClass() { } public BaseClass(T value) { […]

构造函数或字段定义中的实例化有什么区别?

这有什么区别: public class Foo { private Bar bar; public Foo() { bar = new Bar(); } } 还有这个: public class Foo { private Bar bar = new Bar(); public Foo() { } }

构造函数链的目的是什么?

在阅读了这个构造函数链接问题后,我只是想知道为什么会有人进行构造函数链接? 有人可以对可能有用的情景类型有所了解。 这是一个很好的编程习惯吗?

构造函数中的C#默认值与两个用于序列化的构造函数相同

当我为构造函数提供默认值时 public MyClass(string description = null) { …. } 这相当于 public MyClass() { …. } public MyClass(string description) { …. } 在序列化方面 。 换句话说,是否可以使用默认构造函数 ? 实际上它是,但是当我使用序列化时,我会遇到一些问题吗?

为什么不在构造函数中调用可覆盖的方法?

这是一个过于简单的例子,但是我有一些现实生活中的代码在概念上做同样的事情(试图validation派生类的“set”访问器方法的值),并且Analyzer给了我“不要在构造函数中调用可覆盖的方法”。 我试图找出是否应该更改我的代码,或忽略警告。 我想不出任何理由我应该留意这个警告。 public abstract class SimpleUrl { protected string _url; public abstract string Url { get; set; } public SimpleUrl() { } public SimpleUrl(string Url) { this.Url = Url; } } public class HttpUrl : SimpleUrl { public HttpUrl() { } public HttpUrl(string Url) { this.Url = Url; } public override string Url { […]

CA2000在C#中将对象引用传递给基础构造函数

当我通过Visual Studio的代码分析实用程序运行一些代码时,我收到警告,我不确定如何解决。 也许这里的某个人遇到了类似的问题,解决了这个问题,并愿意分享他们的见解。 我正在编写DataGridView控件中使用的自定义绘制单元格。 代码类似于: public class DataGridViewMyCustomColumn : DataGridViewColumn { public DataGridViewMyCustomColumn() : base(new DataGridViewMyCustomCell()) { } 它会生成以下警告: CA2000:Microsoft.Reliability:在方法’DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()’中,在对所有引用超出范围之前,对对象’new DataGridViewMyCustomCell()’调用System.IDisposable.Dispose。 我知道它警告我DataGridViewMyCustomCell(或它inheritance自的类)实现了IDisposable接口,并且应该调用Dispose()方法来清理DataGridViewMyCustomCell声明的任何资源。 我在互联网上看到的示例建议使用块来限制对象的生命周期并让系统自动处理它,但是当移动到构造函数的主体中时不能识别base,因此我无法编写使用阻止它…我不确定我还想做什么,因为不会指示运行时释放仍然可以在以后在基类中使用的对象? 我的问题是,代码是否正常? 或者,如何重构以解决警告? 我不想压制警告,除非这样做真的合适。

在发送到Base构造函数之前修改参数值

标题可能有点含糊不清,但我想不出更好的方法来说明这一点。 我意识到在调用基础构造函数之前我不能调用派生构造函数,但是我可以在将它们传递给基础之前以某种方式修改/创建参数值吗? 例如, public enum InputType { Number = 1, String = 2, Date = 3 } public class BaseClass { public BaseClass(InputType t) { // Logic } } public class DerivedClass : BaseClass { public DerivedClass(int i) : base(value) // Can I do something to infer what value should be here? { // Logic […]

在基类的构造函数之前调用派生类的构造函数

好吧,最初我有几个常量(比如MAX_SPEED)在每个派生类中都有不同的值。 我们的想法是在基类的某些方法中使用这些值。 那时我才意识到我不能用常量做到这一点,所以我创建了只读属性。 我需要一个方法在实例化时将这些值分配给私有字段,最好是在基类中 。 但首先我必须在派生类中确定原始值。 由于这些是属性,我在定义时找不到初始化它们的方法,因此唯一的方法是在派生构造函数中。 这就是问题出现的地方:在分配给基类中的私有字段之后,值被初始化。 我逃避的解决方案是创建一个虚拟方法并在那里进行分配。 有没有办法从派生类调用基础构造函数,以便首先调用派生构造函数的代码? class BaseClass { public BaseClass() { System.Console.WriteLine(“This should be shown after”); } } class DerivedClass : BaseClass { public DerivedClass() : base() { System.Console.WriteLine(“This should be shown first”); } } 当然,在这个例子中,它可以反过来工作。 有解决方案吗?

在字段定义或类构造函数中初始化类字段

我有一个类,其中一个字段需要在初始化对象时进行初始化,例如需要在对象添加/删除之前创建的列表。 public class MyClass1 { private List _otherClassList; public MyClass1() { this._otherClasslist = new List(); } } public class MyClass2 { private List = new List(); public MyClass2() { } } 这两个类有什么区别,为什么你会选择一种方法而不是另一种方法呢? 我通常在构造函数中设置字段,就像在MyClass1中一样,因为我发现更容易在一个地方查看以查看实例化对象时发生的所有事情,但是在任何情况下都更好像在MyClass2中一样直接初始化一个字段?

C# – 通过引用传递参数到构造函数,然后从方法中使用它们

在下面的代码中,我试图从类TestClass中获取一个方法(Work)来更改主程序中某些变量的值,而不必返回它们。 变量通过TestClass构造函数中的引用传递。 class Program { static void Main(string[] args) { int a, b, c, d; a = 5; b = 10; c = 20; d = 25; Console.WriteLine(“Main before TestClass: a=” + a + ” b=” + b + ” c=” + c + ” d=” + d); TestClass testObj = new TestClass(ref a,ref b,ref […]