我需要一些关于继承和向下倾斜的建议

时间:2014-09-10 09:07:30

标签: c# class inheritance

我需要一些关于继承和强制转换的帮助:

public Class1 { public int myVar1;}
public Class2 : Class1 { public int myVar2;}

public void MyMethod(){ 
    Class1 myC1 = new Class1() { myVar1 = 10;} 
    Class2 myC2 = new Class2() { myVar2 = 15;}
    // What i should do here to achieve next
    Console.WriteLine(myC2.myVar1); // myVar1 = 10
}

我想要做的是从myVar1获取10 myC2的值,这样当我致电myC2.myVar1时,它就是10,当我打电话给{{1}时它是15

有可能实现吗?

4 个答案:

答案 0 :(得分:4)

myC2.myVar1的值为0,因为您没有设置它,int字段默认为0

如果您希望myC2.myVar110,请将其设置为:

var myC2 = new Class2{myVar1 = 10, myVar2 = 15};

myC1.myVar1设置为10不会影响它,因为它完全是另一个实例。就像你可以被称为Dimitri一样,我可以被称为Jon,因为我们是不同的人,所以我们的Name属性不会覆盖彼此。

也许你可以通过不创建Class1来获得你想要的效果;如果您使用:

var myC2 = new Class2{myVar1 = 10, myVar2 = 15};
Class1 myC1 = myC2;

然后他们myC1myC2将对完全相同的实例进行两次引用,因为在基类型的变量中保持对对象的引用是合法的。

答案 1 :(得分:0)

Class2 myC2 = new Class2 { myVar1 = 10; myVar2 = 15;}

你做了完全独立的实例。从上面开始,您应该只需调用myC2.myVar1和myC2.myVar2来检索这些值。

因为'Class2'实例继承'Class1','Class2'包含'Class1'字段。

答案 2 :(得分:0)

您可能会有几个非常不同的内容,但这似乎遵循您的描述

    public class Class1 
    {
        internal static int Myvar;
        private int _myVar;
        public int MyVar1
        {
            get{return this.GetType().IsSubclassOf(typeof(Class1)) ? Myvar : _myVar;}
            set{_myVar = value;Myvar = value;}
        }
    }
    public class Class2 : Class1
    {
        public int MyVar2 { get; set; }
    }

如果你有

var myC1 = new Class1 { MyVar1 = 10 };
var myC2 = new Class2 { MyVar2 = 15 }; //myC2.MyVar1 = 10
var myC3 = new Class1 { MyVar1 = 11 }; //myC2.MyVar1 = 11; myC1.MyVar1 = 10

答案 3 :(得分:0)

您可能希望将Class1定义为:

public class Class1
{
  public Class1()
  {
    myVar1 = 10;
  }
  public int myVar1;
}

所以当执行myVar1构造函数时,Class1的默认值为10。