开发者

A field is fixed value for each class,field is not dependent instances ...?

开发者 https://www.devze.com 2023-01-07 19:57 出处:网络
In below example, i defined number field. This field will work as i wanted but it is not enough efficient to provide my expectations.

In below example, i defined number field. This field will work as i wanted but it is not enough efficient to provide my expectations.

number v开发者_JS百科alue is fixed value for each class,number is not dependent instances and number support polymorphism. How can i do that ? Or is there another solution for not use unneccesary number field for instances ?

abstract class Main
{
    public int number;
    public virtual void dostuff(){
        int x = number;
    }
}
class Derived:Main
{

    public ovverride void dostuff(){
        int x = number;
    }
}


You could just make the number a property and initialise is in each class constructor:

abstract class Main
{
    public int number{get; private set;}

    public void dostuff(){
        int x = number;
    }
}

class Derived:Main
{
    public Derived()
    {
        number = 5; // Specific value for each derived class
    }
    public void dostuff(){
        int x = number;
    }
}

Looks like I got the wrong end of the stick -- you want to be able to set it statically per class type, which has already been answered.


You could make the property static and then add it to each class:

   abstract class Main
{
    public static int number;
    public virtual void dostuff(){
        int x = Main.number;
    }
}
class Derived : Main
{
    public static int number;
    public overide void dostuff(){
        int x = Derived.number;
    }
}

Edit: I am a bit confused by your comments about polymorhism so i have added some more examples.

Main obj = new Derived();
obj.doStuff(); //This will use Derived.number; as doStuff is and overidden virtual method.

However if you do the following:

abstract class Main
{
    public static int number;
    public void dostuff(){
        int x = Main.number;
    }
}
class Derived : Main
{
    public static int number;
    public new void dostuff(){
        int x = Derived.number;
    }
}

Then you get different behaviour as below:

Main obj = new Derived();
obj.doStuff() // Will use Main.number
Derived obj2 = (Derived)obj;
obj2.doStuff() // Will use Derived.number

If you want some other kind of behaviour i havn't defined here please exaplin because i do not understand what you want.

0

精彩评论

暂无评论...
验证码 换一张
取 消