当前位置:  开发笔记 > 编程语言 > 正文

无需大量投射即可创建和初始化不同的子类型

如何解决《无需大量投射即可创建和初始化不同的子类型》经验,为你挑选了1个好方法。

我肯定会在下面的代码中乱搞很多代码.似乎应该有一个更顺畅的方式.我基本上尝试使用构建器方法(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作为参数的方法.



1> Marc Gravell..:

我怀疑你想要泛型:

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作为参数的方法.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有