(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:
JavaScript
x
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:
JavaScript
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:
JavaScript
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:
JavaScript
class user: database
{
public static string table_name = "user_table";
public user() : base(table_name) { }
}
Which in turn gives the desired result:
JavaScript
private void button1_Click(object sender, EventArgs e)
{
user u = new user();
u.create(); // calls create method from base without passing any argument
}