ESDictor
ESDictor

Reputation: 745

Using a base class as parameter

I'm sure this is just a matter of me not understanding something completely obvious, but I seem to be hopefully stuck on this.

I have an abstract base class that is inherited by a large amount of other classes, to maintain security information across my application. I'll simplify for this question though.

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; }
}

In this case, about 30 different classes all inherit from ModelBase.

I would like to create a method that can accept any object who's class inherits from ModelBase. So I created something like this:

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

    return true;
}

However, if I try to pass in an object of type SpecificModel, I get an error.

SpecificModel hiThere = new SpecificModel();

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

bool retVal = TestMethods.TestIt(ref hiThere);

The error I see on the last line is: The best overloaded method match for 'TestMethods.TestIt(ref ModelBase)' has some invalid arguments

What am I not "getting" here?

Thanks

Upvotes: 0

Views: 65

Answers (2)

Sufyan Jamil
Sufyan Jamil

Reputation: 54

whats the error it throwing? I have tried it myself its nothing look wrong in your code. might be your calling mechanism is not correct. here is the sample code.

    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; }
}
}

Upvotes: 0

BradleyDotNET
BradleyDotNET

Reputation: 61339

You have it right, except you don't want to be passing by ref (likely the source of your error). Your class is already a reference type, you probably don't need to pass a reference to it. Given the function definition in the question;

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

    return true;
}

Will be perfect (except for the weird "always return true" but perhaps thats because this is demo code).

Upvotes: 3

Related Questions