Interfaces and Abstractions
Interface Variables
A variable can use an interface type instead of a concrete class type.
interface variable
An interface variable can hold any object that implements that interface.
Interface Variables
InterfaceVariables.cs
Replay: real traced execution (multi-file project)
using System;
interface IGreeter
{
string Greet();
}
class FriendlyGreeter : IGreeter
{
private readonly string name;
public FriendlyGreeter(string name)
{
this.name = name;
}
public string Greet()
{
return "hello " + name;
}
}
class Program
{
static void Main()
{
string name = "Mina";
IGreeter greeter = new FriendlyGreeter(name);
string message = greeter.Greet();
Console.WriteLine($"name={name}");
Console.WriteLine($"message={message}");
}
}
using System;
interface IGreeter
{
string Greet();
}
class FriendlyGreeter : IGreeter
{
private readonly string name;
public FriendlyGreeter(string name)
{
this.name = name;
}
public string Greet()
{
return "hello " + name;
}
}
class Program
{
static void Main()
{
string name = "Omar";
IGreeter greeter = new FriendlyGreeter(name);
string message = greeter.Greet();
Console.WriteLine($"name={name}");
Console.WriteLine($"message={message}");
}
}
using System;
interface IGreeter
{
string Greet();
}
class FriendlyGreeter : IGreeter
{
private readonly string name;
public FriendlyGreeter(string name)
{
this.name = name;
}
public string Greet()
{
return "hello " + name;
}
}
class Program
{
static void Main()
{
string name = "Vera";
IGreeter greeter = new FriendlyGreeter(name);
string message = greeter.Greet();
Console.WriteLine($"name={name}");
Console.WriteLine($"message={message}");
}
}
name ← Mina
24{25 static void Main()26 {27 string name→ Mina = "Mina"; //@name="Omar", "Vera"28 IGreeter greeter = new FriendlyGreeter(name);29 string message = greeter.Greet();this.name ← Mina
12public FriendlyGreeter(string nameMina)13{14 this.name→ Mina = nameMina;15}greeter ← FriendlyGreeter
27string name = "Mina"; //@name="Omar", "Vera"28IGreeter greeter→ FriendlyGreeter = new FriendlyGreeter(name);29string message = greeterFriendlyGreeter.Greet();public string Greet()
17public string Greet()18{19 return "hello " + nameMina;20}message ← hello Mina
28 IGreeter greeter = new FriendlyGreeter(name);29 string message→ hello Mina = greeterFriendlyGreeter.Greet();3031 Console.WriteLine($"name={nameMina}");32 Console.WriteLine($"message={messagehello Mina}");33}outputname=Mina message=hello Mina
name ← Omar
24{25 static void Main()26 {27 string name→ Omar = "Omar";28 IGreeter greeter = new FriendlyGreeter(name);29 string message = greeter.Greet();this.name ← Omar
12public FriendlyGreeter(string nameOmar)13{14 this.name→ Omar = nameOmar;15}greeter ← FriendlyGreeter
27string name = "Omar";28IGreeter greeter→ FriendlyGreeter = new FriendlyGreeter(name);29string message = greeterFriendlyGreeter.Greet();public string Greet()
17public string Greet()18{19 return "hello " + nameOmar;20}message ← hello Omar
28 IGreeter greeter = new FriendlyGreeter(name);29 string message→ hello Omar = greeterFriendlyGreeter.Greet();3031 Console.WriteLine($"name={nameOmar}");32 Console.WriteLine($"message={messagehello Omar}");33}outputname=Omar message=hello Omar
name ← Vera
24{25 static void Main()26 {27 string name→ Vera = "Vera";28 IGreeter greeter = new FriendlyGreeter(name);29 string message = greeter.Greet();this.name ← Vera
12public FriendlyGreeter(string nameVera)13{14 this.name→ Vera = nameVera;15}greeter ← FriendlyGreeter
27string name = "Vera";28IGreeter greeter→ FriendlyGreeter = new FriendlyGreeter(name);29string message = greeterFriendlyGreeter.Greet();public string Greet()
17public string Greet()18{19 return "hello " + nameVera;20}message ← hello Vera
28 IGreeter greeter = new FriendlyGreeter(name);29 string message→ hello Vera = greeterFriendlyGreeter.Greet();3031 Console.WriteLine($"name={nameVera}");32 Console.WriteLine($"message={messagehello Vera}");33}outputname=Vera message=hello Vera