使用基类作为参数

时间:2014-11-21 20:22:15

标签: c# inheritance parameters

我确信这只是我不理解一些完全明显的事情的问题,但我似乎希望坚持这一点。

我有一个抽象的基类,它由大量其他类继承,以维护我的应用程序的安全信息。我会简化这个问题。

public abstract class ModelBase
{
    public int UserID { get; set; }
    public string UserName { get; set; }
}

public class SpecificModel : ModelBase
{
    public int specificInt { get; set; }
    public string specificString { get; set; }
}

在这种情况下,大约30个不同的类都继承自ModelBase。

我想创建一个方法,可以接受任何类继承自ModelBase的对象。所以我创建了这样的东西:

public bool TestIt (ref ModelBase BaseModel)
{
    BaseModel.UserID = 10;
    BaseModel.UserName = "Evan";

    return true;
}

但是,如果我尝试传入SpecificModel类型的对象,我会收到错误。

SpecificModel hiThere = new SpecificModel();

hiThere.specificInt = 5;
hiThere.specificString = "Oh well";

bool retVal = TestMethods.TestIt(ref hiThere);

我在最后一行看到的错误是:'TestMethods.TestIt(ref ModelBase)'的最佳重载方法匹配有一些无效的参数

我在这里“没有”到底是什么?

由于

2 个答案:

答案 0 :(得分:3)

你说得对,除了你不想经过ref(可能是你错误的来源)。您的类已经是引用类型,可能不需要传递对它的引用。给出问题中的函数定义;

public bool TestIt (ModelBase BaseModel)
{
    BaseModel.UserID = 10;
    BaseModel.UserName = "Evan";

    return true;
}

将是完美的(除了奇怪的“总是返回true”,但也许这就是因为这是演示代码)。

答案 1 :(得分:0)

它抛出的错误是什么? 我自己尝试过它在你的代码中没有任何错误。可能是你的呼叫机制不正确。这是示例代码。

    class Program
    {

    static void Main(string[] args)
    {
        ModelBase sp = new SpecificModel2();
        TestIt(ref sp);

    }
    public static bool TestIt(ref ModelBase BaseModel)
    {
        BaseModel.UserID = 10;
        BaseModel.UserName = "Evan";

        return true;
    }
}
public abstract class ModelBase
{
    public int UserID { get; set; }
    public string UserName { get; set; }
}

public class SpecificModel : ModelBase
{
    public int specificInt { get; set; }
    public string specificString { get; set; }
}

public class SpecificModel2 : ModelBase
{
    public int specificInt { get; set; }
    public string specificString { get; set; }
}
}