我需要一些关于继承和强制转换的帮助:
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
有可能实现吗?
答案 0 :(得分:4)
myC2.myVar1
的值为0,因为您没有设置它,int
字段默认为0
。
如果您希望myC2.myVar1
为10
,请将其设置为:
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;
然后他们myC1
和myC2
将对完全相同的实例进行两次引用,因为在基类型的变量中保持对对象的引用是合法的。
答案 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。