C# Can';t figue out该值为什么没有';不变
我是OOP和C的新手 我尝试过使用继承和封装概念,但还是被卡住了 当我通过Atm_1类调用存款方法时,我想不出为什么存款方法不起作用C# Can';t figue out该值为什么没有';不变,c#,inheritance,encapsulation,C#,Inheritance,Encapsulation,我是OOP和C的新手 我尝试过使用继承和封装概念,但还是被卡住了 当我通过Atm_1类调用存款方法时,我想不出为什么存款方法不起作用 父类 儿童班 main Atm_1继承了Atm的属性TotalBalance、构造函数Atm()、方法存款(int存款),但不是您设置为新Atm()的数据 Atm_1和Atm是同一类的两个不同实例。尝试将对象Amt_1和Amt可视化为变量,设置一个变量数据不会更改其他数据 从Peter Dunniho的评论中,我可以看出我需要做的是创建一个数组。感谢所有评论和回
父类 儿童班 main
Atm_1
继承了Atm
的属性TotalBalance
、构造函数Atm()
、方法存款(int存款)
,但不是您设置为新Atm()的数据代码>
Atm_1
和Atm
是同一类的两个不同实例。尝试将对象Amt_1
和Amt
可视化为变量,设置一个变量数据不会更改其他数据
从Peter Dunniho的评论中,我可以看出我需要做的是创建一个数组。感谢所有评论和回答:)
类程序
{
静态void Main(字符串[]参数)
{
Atm[]Atm=新Atm[3];
atm[0]=新atm(50);
atm[1]=新atm(100000);
atm[2]=新atm(25);
int totalBalance=0;
对于(int i=0;ii从代码中很清楚为什么代码会这样做。但是不清楚为什么您认为会发生任何不同的事情。为什么您要创建两个不同的对象?为什么您认为一个对象(atm_1
)的更改会影响另一个对象(atm
)?继承是关于类型,而不是实例,修改继承了不同实例类型的类型的一个实例不会对该不同实例产生任何影响。我想创建atm_2、3、4等等。我不想在TotalBalance中存储所有atm的合并值。我建议回顾OO的基本概念P.特别是,您似乎需要了解类的实例是什么。“我想创建atm_2、3、4等等”——因此您实际需要的是一个atm
数组,即atm[]
“我不想在TotalBalance中存储所有atm的组合值”--TotalBalance
属性是atm
类的非静态成员,因此atm
的每个实例都有自己的TotalBalance
值。如果需要实例的总和,只需在数组上迭代并添加每个实例值即可。如果要在r中跟踪总数每次修改每个实例时,这都会更加复杂。这真的很有帮助!我从来没有在脑海中想到数组。非常感谢Peter。
class Atm
{
public int TotalBalance { get; private set; } = 1000;
public Atm() { }
public void DepoSit(int deposit) { TotalBalance += deposit; }
}
class Atm_1:Atm
{
}
class Program
{
static void Main()
{
var atm = new Atm();
var atm_1 = new Atm_1();
//Before Deposit
Console.WriteLine("Total Balance is "+atm.TotalBalance); //1000
//Deposit
atm_1.DepoSit(20);
//After Deposit
Console.WriteLine("Total Balance is " + atm.TotalBalance); //Still 1000 ??
atm.DepoSit(500);
Console.WriteLine("Total Balance is " + atm.TotalBalance); //Now 1500
//This Works -why the above didn't work?
}
}
class Program
{
static void Main(string[] args)
{
Atm[] atm = new Atm[3];
atm[0] = new Atm(50);
atm[1] = new Atm(100000);
atm[2] = new Atm(25);
int totalBalance=0;
for( int i=0;i<atm.Length;i++)
{
totalBalance += atm[i].Balance;
}
Console.WriteLine("TotalBalance is "+totalBalance.ToString("c"));
Console.ReadKey();
}
}
class Atm
{
public int Balance { get; private set; }
public Atm(int balance)
{
Balance=balance;
}
}