【问题标题】:Using static method from generic class使用泛型类中的静态方法
【发布时间】:2017-07-07 04:48:30
【问题描述】:

我有上述问题。我的代码:

public abstract class BaseFactory<T> where T: class
{
    protected static dbModelContainer context = new dbModelContainer();

    public static int UpdateDataBase_static()
    {
        return context.SaveChanges();
    }
 }

我的问题是如何打电话

BaseFactory.UpdateDataBase_static();

代替:

BaseFactory<SomeClass>.UpdateDataBase_static();

有什么想法吗?

【问题讨论】:

  • 你的意思是非通用使用它,还是让编译器从上下文推断 T
  • 你真的不能这样做。您需要将该方法放在非泛型类中,或者您需要在调用它时提供一个类型。你不能同时拥有它。
  • 为什么要从静态上下文开始?如果这是一个 EF 上下文,则应在需要时创建它们,并在完成时将其丢弃。

标签: c# generics


【解决方案1】:

你不能,因为没有这样的方法。最接近的是有一个泛型类继承自的非泛型基。然后你可以有一个不依赖于参数化类型的方法。

【讨论】:

    【解决方案2】:

    你没有。

    在访问类时,您总是需要提供泛型类型参数,即使您没有在方法中使用该类型参数。由于您实际上在方法中使用了泛型类型,这意味着您可以将该方法移出该类,并移入非泛型的方法,但只要它在该类中您需要提供通用参数。

    【讨论】:

      【解决方案3】:

      要调用BaseFactory.UpdateDataBase_static();,您需要一个类BaseFactory。从它继承通用的BaseFactory&lt;T&gt;

      public abstract class BaseFactory
      {
          protected static dbModelContainer context = new dbModelContainer();
      
          public static int UpdateDataBase_static()
          {
              return context.SaveChanges();
          }
       }
      
      public abstract class BaseFactory<T>:BaseFactory where T: class
      {
          ....
      }
      

      【讨论】:

        【解决方案4】:

        不可能完全按照您的要求做,但是由于该方法根本不使用T,您可以只使用BaseFactory&lt;object&gt;.UpdateDataBase_static(); 而无需指定任何特定的类。

        但作为编辑评论,一般来说,从不使用泛型参数的泛型类中的方法可能不应该存在。

        【讨论】:

          猜你喜欢
          • 2012-02-10
          • 2010-10-30
          • 2010-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-09
          • 1970-01-01
          相关资源
          最近更新 更多