从静态上下文获取非静态信息的方法

Pos*_*Guy 7 c#

我知道你不能从实例成员中获取静态成员.

但是,让我说我在一个集会中:

public class ClassA
{
    public List<order> GetOrders(int orderID)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在另一个集会中:

public static ClassB
{
    private static void DoSomethingElse(int orderID)
    {
        List<order> orderList = ClassA.GetOrders(orderID);
        ...rest of code
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在A类中以其他方式获得该方法...有些解决这个问题?

Jon*_*eet 15

您当然可以从实例成员访问静态成员...但您应该理解为什么在没有实例的情况下无法访问实例成员.

您的课程基本上表示每个实例都ClassA允许您获取与特定ID相关联的订单列表.现在,不同的实例ClassA可能会产生不同的结果 - 例如,它们可能连接到不同的数据库.你想进入哪个结果DoSomethingElse

举一个更简单的例子,假设我们有一个Person班级,每个人都有一个名字:

public class Person
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问"什么是Person.Name" 是否有意义?不 - 因为你没有说明你在说什么人.

您应该创建ClassA.GetOrders静态 - 如果它不涉及任何每个实例的信息,包括虚拟成员 - 或者在查找订单时ClassB了解ClassA要使用的实例.

如果您可以让我们知道这些类的更实际的名称,我们可以提供关于哪种解决方案更可能适合的指导......我个人通常会赞成后一种方法,因为静态成员通常导致可测试代码较少.