我肯定会在下面的代码中乱搞很多代码.似乎应该有一个更顺畅的方式.我基本上尝试使用构建器方法(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; }
Marc Gravell.. 6
我怀疑你想要泛型:
private T CreateNewPattern() 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 (); } private CircularHolePattern CreateNewCircularPattern() { return CreateNewPattern (); }
的T
是通用型参数; 我们想要创建的类型.该where
说"它必须是HolePattern
或子类型,它必须有一个公共的无参数构造函数" -这让我们用new T()
创建它的一个新的实例,并访问所有成员HolePattern
对这样的情况下(如PatternName
).这也允许我们调用接受a HolePattern
作为参数的方法.
我怀疑你想要泛型:
private T CreateNewPattern() 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 (); } private CircularHolePattern CreateNewCircularPattern() { return CreateNewPattern (); }
的T
是通用型参数; 我们想要创建的类型.该where
说"它必须是HolePattern
或子类型,它必须有一个公共的无参数构造函数" -这让我们用new T()
创建它的一个新的实例,并访问所有成员HolePattern
对这样的情况下(如PatternName
).这也允许我们调用接受a HolePattern
作为参数的方法.