方法中的程序集名称返回继承的类名称

时间:2019-01-14 11:39:55

标签: c# .net-assembly

好的,你是正确的,我没有很好地解释它。

我有客户端应用程序和服务器WCF服务。为了将所有数据从客户端传输到服务器,我有1个服务器API。该API期望通过字典传递参数。当我传递int,string时,...进展顺利。但是我不能在类上做同样的事情。因此,我在客户端使用该类的序列化,而在服务器类上使用反序列化。对于反序列化,我需要了解服务器端的类类型。因此,我将参数“ AssemblyFullName”放在BaseClass上。我所有的类都继承自BaseClass。

对于与服务器的通讯,我有1种方法。每次通信都会抛出此方法。

internal static void Execute(Dictionary<string, object> parameters)
{
    //finding type of object in parameters
    foreach (KeyValuePair<string, object> keyValuePair in parameters)
    {
        // problem row
        string fullName = keyValuePair.Value.GetType().FullName;
    }

    // rutine for comunication with server
}

我的模型看起来像这样,它包含在服务器和客户端中。

public class BaseClass
{
    private string AssemblyFullName { get; set; }
}

public class A : BaseClass
{

}

public class B : A
{

}

客户端的一种方法期望“ A”并与服务器通信。

public void ClientMethod(A expectedClass)
{
    Execute(new Dictionary<string, object>() { { "identifierOfClassA", expectedClass } });
}

总是通过该类型的“ ClientMethod”调用方法“ Execute”。

A a = new A();
ClientMethod(a);

B b = new B();
ClientMethod(b);

这篇文章的重点是,为什么方法“ Execute”中的行返回“ namespace.A”或“ namespace.B”?为什么不总是返回“ namespace.A”?我从只希望“ A”的方法“ ClientMethod”调用它。

希望现在对您来说会更清楚。

最诚挚的问候,托马斯。

1 个答案:

答案 0 :(得分:2)

  

为什么第二次使用返回“ B”而不是“ A”? “ AnotherMethod”应为“ A”。该方法在两个示例中都可以返回“ A”吗?

是的,当然有:

public string AnotherMethod(A parameter)
{
    return typeof(A).FullName;
}

但这带来了一些问题:

  1. 返回类型的全名时,为什么命名为GetAssemblyName的方法?
  2. 如果您始终要返回A的全名,为什么甚至需要parameter?为什么您甚至需要一种方法? typeof(A)很好。
  3. 如果您要尝试其他方法,请使问题更清楚。就目前而言,这令人困惑。