(I am kind of new to C# so please forgive me if my question makes anyone laugh π ).
I have a ‘database’ class which has a method public bool Create(). And ‘user’ class which has a field string table_name = "user_table" and it inherits the ‘database’ class. Is there a way to access user.table_name from the ‘create’ method of ‘database’ class? I am coming from php where you can use the keyword static::$variable_name from base class and it returns the value of that variable which is in the child class. For example:
    class A{
        public static function func(){
            $a = static::$variable_in_child_class; // calling the variable that is in child class
            print $a;
        }
    }
    class B extends A{
        public static $variable_in_child_class= "some value"; // variable in B class
    }
    $b = new B(); // object of type B
    $b->func();   // prints "some value"
Can i do anything similar in c#? Like:
    class database{
        public bool Create(){
            string table_name = //get the table name from child class
        }        
    }
    class user : database{
        public string table_name = "user_table";
    }
    private void button1_Click(object sender, EventArgs e)
    {
        user u = new user();
        u.create(); // calls create method from base without passing any argument
    }
Advertisement
Answer
I think the best solution is to implement constructors for your classes:
class database
{
    public database()
    {
        //Parameterless constructor, should you need it.
    }
    public database(string table_name)
    {
        var tablename = table_name; //Initialization logic goes here
    }
}
Then your user class can call the base constructor as such:
class user: database
{
    public static string table_name = "user_table";
    public user() : base(table_name) { }
}
Which in turn gives the desired result:
private void button1_Click(object sender, EventArgs e)
    {
        user u = new user();
        u.create(); // calls create method from base without passing any argument
    }