创建未知类型的对象

时间:2014-01-16 16:43:43

标签: c# generics inheritance

我有三节课。 B和C. A和B均来自C(C具有OAuth属性),A和B都具有不同于C属性的不同属性

我有一个设置A和B的OAuth属性的函数,但由于它们是不同的类型,我通过该方法传入一个对象。然后我检查A是A还是B是B,但我不知道在哪里设置OAuth属性(我不想复制我的代码)

public string SerializeForAPI(object myObject)
{
    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();

    if (myObject is A)
    {
        A data = (A)myObject; 
    }
    else if (myObject is B) 
    {
        B data = (B)myObject;
    }
    // these are obviously not set because the object is within the if statement
    data.oauth_consumer_key = this.ConsumerKey;
    data.oauth_token = this.Token;

    string serialized = jsonSerializer.Serialize(data);
    ...
}

2 个答案:

答案 0 :(得分:3)

如果你知道C将永远是它的子类,只需将其转换为myObject

C data = (C) myObject;
data.oauth_consumer_key = this.ConsumerKey;
// etc.

答案 1 :(得分:0)

该方法应接受C类型的对象,而不是object类型的对象。

public string SerializeForAPI(C myObject)

现在,您可以将AB实例传入此方法,并且该方法可以确保传入其中的任何内容都包含oauth_consumer_key和{{1成员,所以这个方法可以做这个类型所需的一切。如果没有oauth_token类型的参数,那么即使可能也无法传入无效的对象。