我肯定会在下面的代码中乱搞很多代码.似乎应该有一个更顺畅的方式.我基本上尝试使用构建器方法(CreateNewPattern)来处理创建传递的子类类型的新对象(通过CreateNewCircularPattern和CreateNewLinePattern方法).我目前只有两个子类型的CircularHolePattern和SingleLineHolePattern继承自HolePattern,但我希望随着我的应用程序的增长有更多.
这是一个使用委托或lambda的地方吗?它对它们一无所知,所以请尽可能具体和代码建议.
private CircularHolePattern CreateNewCircularPattern()
{
var CreatedPattern = CreateNewPattern(typeof(CircularHolePattern));
return (CircularHolePattern)CreatedPattern;
}
private SingleLineHolePattern CreateNewLinePattern()
{
var CreatedPattern=CreateNewPattern(typeof(SingleLineHolePattern));
return (SingleLineHolePattern)CreatedPattern;
}
private HolePattern CreateNewPattern(Type PatternTypeToCreate)
{
var NewHolePattern = (HolePattern)Activator.CreateInstance(PatternTypeToCreate);
NewHolePattern.PatternName = "Pattern #" + (HolePatterns.Count + 1).ToString();
this.AddPattern(NewHolePattern);
this.SetActivePattern(NewHolePattern);
return NewHolePattern;
}
Run Code Online (Sandbox Code Playgroud)
我怀疑你想要泛型:
private T CreateNewPattern<T>() where T : HolePattern, new()
{
var newHolePattern = new T();
newHolePattern.PatternName = "Pattern #" +
(HolePatterns.Count + 1).ToString();
this.AddPattern(newHolePattern);
this.SetActivePattern(newHolePattern);
return newHolePattern;
}
private SingleLineHolePattern CreateNewLinePattern() {
return CreateNewPattern<SingleLineHolePattern>();
}
private CircularHolePattern CreateNewCircularPattern() {
return CreateNewPattern<CircularHolePattern>();
}
Run Code Online (Sandbox Code Playgroud)
的T是通用型参数; 我们想要创建的类型.该where说"它必须是HolePattern或子类型,它必须有一个公共的无参数构造函数" -这让我们用new T()创建它的一个新的实例,并访问所有成员HolePattern对这样的情况下(如PatternName).这也允许我们调用接受a HolePattern作为参数的方法.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |