代码之家  ›  专栏  ›  技术社区  ›  Daniel A. White

相反的仿制药?

  •  0
  • Daniel A. White  · 技术社区  · 14 年前

    有没有办法不用 Type 班级?我宁愿使用仿制药。

    abstract class MyAbstract
    {
        protected abstract T GetSpecialType();
    
        private void MyPrivateFunction()
        {
            someT = GetSpecialType();
    
        }
        private void DoSomething<T>()
        { 
        }
    }
    
    class MyConcrete : MyAbstract
    {
       protected override T GetSpecialType()
       {
         return SomeReallySpecialClass();
       }
    }
    

    我相信这是可行的(就像我现在拥有的那样),但它很难看。

    abstract class MyAbstract
    {
        protected abstract Type GetSpecialType();
    
        private void MyPrivateFunction()
        {
            Type someT = GetSpecialType();
    
        }
        private void DoSomething(Type ofT)
        { 
        }
    }
    
    class MyConcrete : MyAbstract
    {
       protected override Type GetSpecialType()
       {
         return typeof(SomeReallySpecialClas();
       }
    }
    

    我应该把它作为抽象类的泛型参数吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   kvb    14 年前

    我不太清楚你想做什么,但可能是这样?

    abstract class MyAbstract<T>
    {
        private void DoSomething()
        {
            // Use typeof(T) here as needed
        }
    }
    
    class MyConcrete : MyAbstract<SomeReallySpecialClass>
    {
        // Is there any other logic here?
    }
    
        2
  •  0
  •   Simon P Stevens    14 年前

    我不太明白你想达到什么目的。(如果我的回答是错误的,你可能想澄清一下你的问题,并添加一些你想做什么的细节)


    如果只是尝试基于泛型类型参数创建新对象,则可能需要查看 new constraint .

    class ItemFactory<T> where T : new()
    {
        public T GetNewItem()
        {
            return new T();
        }
    }
    

    通过包含“new”约束,它可以确保在创建itemFactory类时提供的任何类型都必须具有公共的无参数构造函数,这意味着您可以在类内创建新对象。