using System;
using System.Collections.Generic;
using System.Text;
using Wrox.ProCSharp.VenusBank;
using Wrox.ProCSharp.JupiterBank;
namespace Wrox.ProCSharp
{
public interface IBankAccount
{
void PayIn(decimal amount); //存款的方法
bool Withdraw(decimal amount); //判断是否余款不足
decimal Balance //返回余款的属性
{
get;
}
}
//在这段代码中,一个要点是把引用变量声明为IBankAccount引用的方式。
//这表示它们可以指向实现这个接口的任何类的实例。但我们只能通过这些引用调用方法(这些方法是接口的一部分)——
//如果要调用由不在接口中的类执行的任何方法,就需要把引用强制转换为合适的类型。在这段代码中,我们调用了ToString()
//(不由IBankAccount实现),但没有进行任何显式转换,这只是因为ToString()是一个System.Object方法,C#编译器知道任何类都支持这个
//方法(换言之,从接口到System.Object的数据类型转换是隐式的
class MainEntryPoint
{
static void Main()
{
IBankAccount venusAccount = new SaverAccount(); //以上已经详细说明表示他们可以指向实现这些接口的任何方法
IBankAccount jupiterAccount = new GoldAccount();
venusAccount.PayIn(200);
venusAccount.Withdraw(100);
Console.WriteLine(venusAccount.ToString());
jupiterAccount.PayIn(500);
jupiterAccount.Withdraw(600);
jupiterAccount.Withdraw(100);
Console.WriteLine(jupiterAccount.ToString());
}
}
}
namespace Wrox.ProCSharp.JupiterBank
{
public class GoldAccount : IBankAccount
{
private decimal balance;
public void PayIn(decimal amount)
{
balance += amount;
}
public bool Withdraw(decimal amount)
{
if (balance >= amount)
{
balance -= amount;
return true;
}
Console.WriteLine("Withdrawal attempt failed.");
return false;
}
public decimal Balance
{
get
{
return balance;
}
}
public override string ToString()
{
return String.Format("Jupiter Bank Saver: Balance = {0,6:C}", balance);
}
}
}
namespace Wrox.ProCSharp.VenusBank
{
public class SaverAccount : IBankAccount
{
private decimal balance;
public void PayIn(decimal amount)
{
balance += amount;
}
public bool Withdraw(decimal amount)
{
if (balance >= amount)
{
balance -= amount;
return true;
}
Console.WriteLine("Withdrawal attempt failed.");
return false;
}
public decimal Balance
{
get
{
return balance;
}
}
public override string ToString()
{
return String.Format("Venus Bank Saver: Balance = {0,6:C}", balance);
}
}
}
/*
* 学习小结:今天学花了一点时间看了下C#高级编程这本书,真是感觉不是很好,翻译过的书这么就成这样了呢,感觉很多东西翻译的
* 一点不通,不过没办法,总比看英文版的速度快多了,希望慢慢习惯吧o(∩_∩)o
* 言归正传:C#2.0高级编程学习之路----定义和实现接口(在派生类中实现)篇
* 以上是一个银行帐户之间进行转帐的程序。许多公司可以实现银行账户,但它们都是彼此赞同表示银行账户的所有类都实现接
* 口IBankAccount。该接口包含一个用于存取款的方法和一个返回余额的属性。这个接口还允许外部代码识别由不同银行账户执行的各种银行账户类。
* 我们的目的是允许银行账户彼此通信就行了,只是做个试验而已。
*
*/
using System.Collections.Generic;
using System.Text;
using Wrox.ProCSharp.VenusBank;
using Wrox.ProCSharp.JupiterBank;
namespace Wrox.ProCSharp
{
public interface IBankAccount
{
void PayIn(decimal amount); //存款的方法
bool Withdraw(decimal amount); //判断是否余款不足
decimal Balance //返回余款的属性
{
get;
}
}
//在这段代码中,一个要点是把引用变量声明为IBankAccount引用的方式。
//这表示它们可以指向实现这个接口的任何类的实例。但我们只能通过这些引用调用方法(这些方法是接口的一部分)——
//如果要调用由不在接口中的类执行的任何方法,就需要把引用强制转换为合适的类型。在这段代码中,我们调用了ToString()
//(不由IBankAccount实现),但没有进行任何显式转换,这只是因为ToString()是一个System.Object方法,C#编译器知道任何类都支持这个
//方法(换言之,从接口到System.Object的数据类型转换是隐式的
class MainEntryPoint
{
static void Main()
{
IBankAccount venusAccount = new SaverAccount(); //以上已经详细说明表示他们可以指向实现这些接口的任何方法
IBankAccount jupiterAccount = new GoldAccount();
venusAccount.PayIn(200);
venusAccount.Withdraw(100);
Console.WriteLine(venusAccount.ToString());
jupiterAccount.PayIn(500);
jupiterAccount.Withdraw(600);
jupiterAccount.Withdraw(100);
Console.WriteLine(jupiterAccount.ToString());
}
}
}
namespace Wrox.ProCSharp.JupiterBank
{
public class GoldAccount : IBankAccount
{
private decimal balance;
public void PayIn(decimal amount)
{
balance += amount;
}
public bool Withdraw(decimal amount)
{
if (balance >= amount)
{
balance -= amount;
return true;
}
Console.WriteLine("Withdrawal attempt failed.");
return false;
}
public decimal Balance
{
get
{
return balance;
}
}
public override string ToString()
{
return String.Format("Jupiter Bank Saver: Balance = {0,6:C}", balance);
}
}
}
namespace Wrox.ProCSharp.VenusBank
{
public class SaverAccount : IBankAccount
{
private decimal balance;
public void PayIn(decimal amount)
{
balance += amount;
}
public bool Withdraw(decimal amount)
{
if (balance >= amount)
{
balance -= amount;
return true;
}
Console.WriteLine("Withdrawal attempt failed.");
return false;
}
public decimal Balance
{
get
{
return balance;
}
}
public override string ToString()
{
return String.Format("Venus Bank Saver: Balance = {0,6:C}", balance);
}
}
}
/*
* 学习小结:今天学花了一点时间看了下C#高级编程这本书,真是感觉不是很好,翻译过的书这么就成这样了呢,感觉很多东西翻译的
* 一点不通,不过没办法,总比看英文版的速度快多了,希望慢慢习惯吧o(∩_∩)o
* 言归正传:C#2.0高级编程学习之路----定义和实现接口(在派生类中实现)篇
* 以上是一个银行帐户之间进行转帐的程序。许多公司可以实现银行账户,但它们都是彼此赞同表示银行账户的所有类都实现接
* 口IBankAccount。该接口包含一个用于存取款的方法和一个返回余额的属性。这个接口还允许外部代码识别由不同银行账户执行的各种银行账户类。
* 我们的目的是允许银行账户彼此通信就行了,只是做个试验而已。
*
*/