Using the subclass method for an object of a base class

Say I declared the following classes:

class BaseClass{
    /* properties, constructors, getters, setters etc. */

    public static BaseClass Create(string url){
    /*will return, depending on url, a BaseClass or a SubClass object*/
    }

    public void Method(){
    /* some code here */
    }
}

class SubClass: BaseClass{
    /* other properties, constructors, getters, setters etc. */

    new public void Method(){
    /* some other code here */
    }
}

Now in my main method, I would like to do something like:

BaseClass baseClass = BaseClass.Create(url);
if(baseClass.GetType()==typeof(SubClass)){ 
    baseClass.Method();
}

The idea here, of course, is to use Method, as it is implemented in SubClass. This may be a dumb question, but how do I do this? I cannot drop the base class into a subclass, so I'm not sure ...

EDIT

Clarified my question. Despite the fact that baseClass was declared as an instance of BaseClass, it baseClass is SubClasswill return true, if any url, that it Createreturns an instance SubClass.

+3
source share
4 answers

, , . , ?

class BaseClass{

    public virtual void Method(){
        Console.WriteLine("BaseClass");
    }
}

class SubClass : BaseClass{
    /* other properties, constructors, getters, setters etc. */

    public override void Method(){
        Console.WriteLine("SubClass");
    }
}

static class Test
{
    public void go() {
        BaseClass instance = new SubClass();
        instance.Method(); // prints "SubClass"
    }
}

, - , , .

+2

, , ?
, BaseClass SubClass.

, SubClass, BaseClass. SubClass Method()

+2

baseClass baseClass, SubClass,

BaseClass baseClass = new SubClass();
if (baseClass is SubClass)
{
    SubClass subClass = baseClass as SubClass;
    subClass.Method();
}

, SubClass.

+1

: SubClass, .

Then declare the method in the base class virtual,

or

pass the object in SubClassand call the method this way.

So either

class BaseClass{
    /* properties, constructors, getters, setters etc. */

    virtual public void Method(){
    /* some code here */
    }
}

or

 ((SubClass)baseClass).Method();
0
source

All Articles