我确信这只是我不理解一些完全明显的事情的问题,但我似乎希望坚持这一点。
我有一个抽象的基类,它由大量其他类继承,以维护我的应用程序的安全信息。我会简化这个问题。
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)'的最佳重载方法匹配有一些无效的参数
我在这里“没有”到底是什么?
由于
答案 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; }
}
}