C# 在C中不使用参数而将信息传递给构造函数#
我把自己逼到了一个角落里。这里是我所拥有的(用C#)的简化版本: 但是我在几个泛型类型中使用BadClass,所以我必须有一个无参数的BadClass构造函数。很遗憾我不能做这样的事:C# 在C中不使用参数而将信息传递给构造函数#,c#,generics,constructor,C#,Generics,Constructor,我把自己逼到了一个角落里。这里是我所拥有的(用C#)的简化版本: 但是我在几个泛型类型中使用BadClass,所以我必须有一个无参数的BadClass构造函数。很遗憾我不能做这样的事: Build<BadClass(5)>(anObject); Build(一个对象); 那么,当我无法将参数传递到构造函数中时,如何向构造函数提供运行时信息呢? 是否可以创建BadClass类型的运行时实例,为其提供所需的信息,然后在我的泛型类型中使用这些信息 编辑:我使用列表作为示例泛型类型,但这
Build<BadClass(5)>(anObject);
Build(一个对象);
那么,当我无法将参数传递到构造函数中时,如何向构造函数提供运行时信息呢?是否可以创建BadClass类型的运行时实例,为其提供所需的信息,然后在我的泛型类型中使用这些信息 编辑:我使用列表作为示例泛型类型,但这并不能完全表达我的困境的深度…
如果我使用的是BadClass,我可以在Build中创建一个测试来调用init函数,但这是非常粗糙的。我希望找到一种稍微不那么难看的方法来解决这个问题。当您创建
列表时,您并没有创建任何BadClass实例。继续并以这种方式创建一个实例,但当您创建一个BadClass实例以添加到它时,您将调用参数化构造函数:
List<BadClass> a = new List<BadClass>();
a.Add(new BadClass(1));
a.Add(new BadClass(2));
List a=新列表();
a、 增加(新的BadClass(1));
a、 增加(新的BadClass(2));
顺便说一句,BadClass实例的构造取决于创建它的OuterClass是哪个,这有点代码味道。您试图完成什么?当您创建列表时,您没有创建任何BadClass实例。继续并以这种方式创建一个实例,但当您创建一个BadClass实例以添加到它时,您将调用参数化构造函数:
List<BadClass> a = new List<BadClass>();
a.Add(new BadClass(1));
a.Add(new BadClass(2));
List a=新列表();
a、 增加(新的BadClass(1));
a、 增加(新的BadClass(2));
顺便说一句,BadClass实例的构造取决于创建它的OuterClass是哪个,这有点代码味道。您想要完成什么?您能给BadClass一个初始化方法吗
private class BadClass
{
private int Data;
public BadClass()
{
Data = 0;
...
}
public void Init(int dataValue)
{
Data = dataValue;
}
}
当您创建一个时,它是:
BadClass myInst = new BadClass(); // void constructor, as you require.
myInst.Init(5); // Set the value to 5.
你能给BadClass一个初始化方法吗
private class BadClass
{
private int Data;
public BadClass()
{
Data = 0;
...
}
public void Init(int dataValue)
{
Data = dataValue;
}
}
当您创建一个时,它是:
BadClass myInst = new BadClass(); // void constructor, as you require.
myInst.Init(5); // Set the value to 5.
如果需要具有多个属于泛型变体的BadClass类型,可以通过更改继承树来实现:
class OuterClass {
private class BadClassBase {
// whatever BadClass does
}
private class BadClass : BadClassBase {
public BadClass(T item) {
...
}
}
}
不确定这是否是您想要的,但您可以创建列表。如果您需要具有多个属于泛型变体的BadClass类型,可以通过更改继承树来实现:
class OuterClass {
private class BadClassBase {
// whatever BadClass does
}
private class BadClass : BadClassBase {
public BadClass(T item) {
...
}
}
}
不确定这是否是你想要的,但你可以创建你的列表。这样做怎么样
using System.Collections.Generic;
class OuterClass
{
private class BadClass
{
private int _data;
public BadClass()
{
_data = 0;
}
public int Data
{
get
{
return _data;
}
set
{
_data = value;
}
}
}
void SomeMethod()
{
List<BadClass> a = new List<BadClass>()
{
new BadClass() { Data = 7 },
new BadClass() { Data = 9 }
};
}
}
使用System.Collections.Generic;
类外类
{
私人班坏班
{
私有int_数据;
公共类()
{
_数据=0;
}
公共整数数据
{
得到
{
返回数据;
}
设置
{
_数据=价值;
}
}
}
void方法()
{
列表a=新列表()
{
新的BadClass(){Data=7},
新建BadClass(){Data=9}
};
}
}
这样做怎么样
using System.Collections.Generic;
class OuterClass
{
private class BadClass
{
private int _data;
public BadClass()
{
_data = 0;
}
public int Data
{
get
{
return _data;
}
set
{
_data = value;
}
}
}
void SomeMethod()
{
List<BadClass> a = new List<BadClass>()
{
new BadClass() { Data = 7 },
new BadClass() { Data = 9 }
};
}
}
使用System.Collections.Generic;
类外类
{
私人班坏班
{
私有int_数据;
公共类()
{
_数据=0;
}
公共整数数据
{
得到
{
返回数据;
}
设置
{
_数据=价值;
}
}
}
void方法()
{
列表a=新列表()
{
新的BadClass(){Data=7},
新建BadClass(){Data=9}
};
}
}
为什么不能有多个构造函数;“但我在几个泛型类型中使用BadClass,所以我必须有一个无参数的BadClass构造函数”让我感到困惑。List是一个糟糕的示例,泛型类型肯定可以在其构造函数中创建BadClass的实例。我可能可以这样做,但我认为如果我有一个永远不应该使用的无参数构造函数,我的代码会更难闻。另外,当我最初编写BadClass时,我没有预见到调整数据的需要,显然我搞砸了Taniguchi-我可以有多个构造函数,但是在泛型类型中使用该类意味着我必须有一个没有参数的构造函数。我不能再构建一个有效的无参数构造函数了。@oillio:我想你对何时创建BadClass的实例感到困惑。列表上没有创建BadClass实例的操作。你在考虑序列化吗?@John-看看我的编辑。这能更好地说明我的问题吗?为什么不能有多个构造函数;“但我在几个泛型类型中使用BadClass,所以我必须有一个无参数的BadClass构造函数”让我感到困惑。List是一个糟糕的示例,泛型类型肯定可以在其构造函数中创建BadClass的实例。我可能可以这样做,但我认为如果我有一个永远不应该使用的无参数构造函数,我的代码会更难闻。另外,当我最初编写BadClass时,我没有预见到调整数据的需要,显然我搞砸了Taniguchi-我可以有多个构造函数,但是在泛型类型中使用该类意味着我必须有一个没有参数的构造函数。我不能再构建一个有效的无参数构造函数了。@oillio:我想你对何时创建BadClass的实例感到困惑。列表上没有创建BadClass实例的操作。你在考虑序列化吗?@John-看看我的编辑。这能更好地说明我的问题吗?+1,我喜欢这个模式——在(一些)文献中称之为“两阶段构造”,顺便说一下,+1,我喜欢这个模式——在(一些)文献中称之为“两阶段构造”,顺便说一句。为什么不让构造器过载?我仍然不知道你想要实现什么。将对象传递给构建方法smel的事实