C# &引用;“对象”;不包含“的定义”;名称“;

C# &引用;“对象”;不包含“的定义”;名称“;,c#,inheritance,polymorphism,C#,Inheritance,Polymorphism,我收到一条错误消息,告诉我: “BankAccount.account”不包含“提款”的定义 这是我的密码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BankAccounts { class account { protected string name; protected float balance; public

我收到一条错误消息,告诉我:

“BankAccount.account”不包含“提款”的定义

这是我的密码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BankAccounts
{
class account
{
    protected string name;
    protected float balance;
    public account(string n, float b)
    {
        name = n;
        balance = b;
    }

    public void deposit(float amt)
    {
        balance -= amt;
    }

    public void display()
    {
        Console.WriteLine("Name: {0}. Balance: {1}.", name, balance);
    }
}

class savingaccount : account
{
    static int accno = 1000;
    int trans;
    public savingaccount(string s, float b) : base(s, b)
    {
        trans = 0;
        accno++;
    }
    public void withdraw (float amt)
    {
        if (trans >= 10)
        {
            Console.WriteLine("Number of transactions exceed 10.");
            return;
        }
        if (balance - amt < 500)
            Console.WriteLine("Below minimum balance.");
        else
        {
            base.withdraw(amt);
            trans++;
        }
    }
    public void deposit(float amt)
    {
        if (trans >= 10)
        {
            Console.WriteLine("Number of transactions exceed 10.");
            return;
        }
        base.deposit(amt);
        trans++;
    }
    public void display()
    {
        Console.WriteLine("Name: {0}. Account no.: {1}. Balance: {2}", name, accno,        balance);
    }
}

class currentaccount : account
{
    static int accno = 1000;
    public currentaccount(string s, float b) : base(s, b)
    {
        accno++;
    }
    public void withdraw(float amt)
    {
        if (balance - amt < 0)
            Console.WriteLine("No balance in account.");
        else
            balance -= amt;
    }
    public void display()
    {
        Console.WriteLine("Name: {0}. Account no.: {1}. Balance: {2}.", name, accno, balance);
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
名称空间银行帐户
{
类别帐户
{
受保护的字符串名称;
保护浮子平衡;
公共帐户(字符串n,浮动b)
{
name=n;
平衡=b;
}
公共无效存款(浮动金额)
{
余额-=金额;
}
公共空间显示()
{
WriteLine(“名称:{0}.Balance:{1}.”,名称,Balance);
}
}
类别储蓄账户:账户
{
静态int accno=1000;
int-trans;
公共储蓄账户(字符串s,浮动b):基础(s,b)
{
反式=0;
accno++;
}
公开作废取款(浮动金额)
{
如果(变速器>=10)
{
Console.WriteLine(“交易数量超过10”);
返回;
}
如果(余额-金额<500)
控制台。写线(“低于最低余额”);
其他的
{
基准提取金额(amt);
反式++;
}
}
公共无效存款(浮动金额)
{
如果(变速器>=10)
{
Console.WriteLine(“交易数量超过10”);
返回;
}
基本存款(金额);
反式++;
}
公共空间显示()
{
Console.WriteLine(“名称:{0}。账号:{1}。余额:{2}”,名称,账号,余额);
}
}
类别:活期账户
{
静态int accno=1000;
公共活期账户(字符串s,浮动b):基数(s,b)
{
accno++;
}
公开作废取款(浮动金额)
{
如果(余额-金额<0)
控制台。WriteLine(“账户中无余额”);
其他的
余额-=金额;
}
公共空间显示()
{
Console.WriteLine(“名称:{0}。账号:{1}。余额:{2}.”,名称,账号,余额);
}
}
}

我不明白为什么它不认识它。它是savingaccount类中的一个方法。

您正在调用

base.withdraw(amt);
从您的类中
保存saccount
。但是基类(
account
)没有这样的方法。因此编译器是绝对正确的。

您正在调用

base.withdraw(amt);

从您的类中
保存saccount
。但是基类(
account
)没有这样的方法。因此编译器是绝对正确的。

您在
savingaccount
类中调用
base.draw(amt)
,但基类
account
没有定义此方法。

您在
savingaccount
类中调用
base.draw(amt)
,但是基类
account
没有定义此方法。

如果仔细观察,您会发现您的
account
类实际上没有
draw
方法

我猜您是想让您的
帐户
类包含一个虚拟方法
提取
,定义如下:
公共虚空提取(浮动金额){…}

然后,在继承的类中,您希望重写此方法,如下所示:


您的代码也存在命名风格问题,但这可能不在这个问题的范围之内:)

如果仔细观察,您会发现您的
帐户
类实际上没有
提取
方法

我猜您是想让您的
帐户
类包含一个虚拟方法
提取
,定义如下:
公共虚空提取(浮动金额){…}

然后,在继承的类中,您希望重写此方法,如下所示:


您的代码也存在命名风格问题,但这可能不在这个问题的范围之内:)

我假设您的意图是在base
account
类中定义基本的
draw
方法,这样它将被
savingaccount
currentcount
继承。如果需要,您应该将其声明为
virtual
,以便允许派生类重写它

class account
{
    public virtual void withdraw(float amt)
    {
        if (balance - amt < 0)
            Console.WriteLine("No balance in account.");
        else
            balance -= amt;
    }
}

我假设您的意图是在base
account
类中定义基本的
draw
方法,这样它将被
savingaccount
currentaccount
继承。如果需要,您应该将其声明为
virtual
,以便允许派生类重写它

class account
{
    public virtual void withdraw(float amt)
    {
        if (balance - amt < 0)
            Console.WriteLine("No balance in account.");
        else
            balance -= amt;
    }
}

看起来您只是错过了基类型中的方法:

public virtual void Deposit(float amt)
{
    balance += amt;
}
public virtual void Withdraw(float amt)
{
    balance -= amt;
}

注意:我将“存款”更改为
+=
,并将方法
设置为虚拟的
,以便子类可以
覆盖
该方法,这是(我强烈怀疑)这里的意图。另外,
float
是一个非常糟糕的储钱选择<代码>十进制
可能是更好的选择。作为一种风格上的改变,我还将名称大写。

看起来您只是错过了基本类型中的方法:

public virtual void Deposit(float amt)
{
    balance += amt;
}
public virtual void Withdraw(float amt)
{
    balance -= amt;
}

注意:我将“存款”更改为
+=
,并将方法
设置为虚拟的
,以便子类可以
覆盖
该方法,这是(我强烈怀疑)这里的意图。另外,
float
是一个非常糟糕的储钱选择<代码>十进制
可能是更好的选择。作为一种风格上的改变,我还将名称大写。

正如大家指出的allready,您应该在基类acocunt上声明draw()方法,以便所有派生类都可以继承该方法。

正如大家指出的allready,您应该在基类acocunt上声明draw()方法,因此,所有派生类都可以继承该方法。

帐户中没有
.draw
方法(顺便说一句,最好将类名大写),但是派生类拥有它们-为什么不在