| |
|
Interface in C#
|
| |
|
An interface is like a contract. When a person signs a contract they are agreeing
to perform in adherence to its' contents. The person can take any action which is
not specifically identified in the contract or build on top of the agreements
within it. An interface has a similar concept. In this example I will refer to
an IAccount interface. The expectation is that when a programmer implements this
interface into thier program that all the contents of the Interface will be
implemented. The below interface expects that the class implementing the the
interface will have an Account Number, a Account Login, an Account Balance, a
Last Login Date/Time and have an Account Type:
|
| |
public interface IAccount
{
string accountNumber { get; set; }
string accountLogin { get; set; }
float accountBalance { get; set; }
DateTime? lastLogin { get; set; }
AccountCategory accountType { get; set; }
void AccountCharacteristics();
}
|
| |
|
As well, we expect the class implementing this interface to create a function
called AccountCharacteristics(). I didn't specify exactly what it does, but I
made the name intuitive enough for them to figure out what is needed.
|
| |
|
The Account Catagorty type is an ENUM and looks like this:
|
| |
public enum AccountCategory
{
Checking,
Savings,
Retirement,
Investment
}
|
| |
|
I am providing a list of Account Categories that can be used when populating
the class with data.
|
| |
AccountCategory.Savings, AccountCategory.Investment, etc...
|
| |
|
In this example I also want to provide an interface that exposes some
account dimensions:
|
| |
public interface IAccountDimensions
{
float minBalance { get; set; }
string currency { get; set; }
bool advisorEnabled { get; set; }
}
|
| |
|
So when a class implements this interface they need to create a minimum balance,
currency and advisor property. The below example of an Account class implements
both the IAccount and IAccountDimensions. It impements all the properties
identified in the 2 interfaces, plus the AccountCharacteristics method.
In the constructor, I only wanted the Account Number, Account Login, Account
Balance and Account Type loaded.
|
| |
public class Account : IAccount, IAccountDimensions
{
public string accountNumber { get; set; }
public string accountLogin { get; set; }
public float accountBalance { get; set; }
public DateTime? lastLogin { get; set; }
public AccountCategory accountType { get; set; }
public float minBalance { get; set; }
public string currency { get; set; }
public bool advisorEnabled { get; set; }
public Account(string AccountNumber,
string AccountLogin,
float AccountBalance,
AccountCategory AccountType)
{
accountNumber = AccountNumber;
accountLogin = AccountLogin;
accountBalance = AccountBalance;
accountType = AccountType;
}
public void AccountCharacteristics()
{
Console.WriteLine("Account Characteristics");
Console.WriteLine("accountNumber: {0}", accountNumber);
Console.WriteLine("accountLogin: {0}", accountLogin);
Console.WriteLine("accountBalance: {0}", accountBalance);
Console.WriteLine("lastLogin: {0}", lastLogin);
Console.WriteLine("AccountCategory: {0}", accountType);
Console.WriteLine("minBalance: {0}", minBalance);
Console.WriteLine("currency: {0}", currency);
Console.WriteLine("advisorEnabled: {0}", advisorEnabled);
}
}
|
| |
|
When loading the data into your class for processing, I again mention that I do not
request/want all the properties loaded when the class gets instantiated. I did this to
show that it is also possible to access and modify the properties of the class after
the instance has been created, like I show below:
|
| |
Account savingsAcct =
new Account("SS345-9I", "JADFL2",
.34f, AccountCategory.Savings);
savingsAcct.lastLogin = DateTime.Now;
savingsAcct.minBalance = 5000.00f;
savingsAcct.currency = "USD";
savingsAcct.advisorEnabled = false;
|
| |
|
The first row creates the intances passing the required parameters to the
constructor. Then I can access the other properties using the instance directly.
|
| |
|
An interface is a powerful tool that can be used to enforce guidlines for
your development and business models
|
| |
| Download the source |
| |
| |
|
|