Interfaces and Abstractions
Interface Intro
An interface names behavior that a class promises to provide.
interface
An interface describes methods or properties without storing object state.
Interface Intro
InterfaceIntro.cs
Replay: real traced execution (multi-file project)
using System;
interface ILabel
{
string Label();
}
class NameTag : ILabel
{
private readonly string name;
public NameTag(string name)
{
this.name = name;
}
public string Label()
{
return "tag:" + name;
}
}
class Program
{
static void Main()
{
string name = "Ari";
NameTag tag = new NameTag(name);
string label = tag.Label();
Console.WriteLine($"name={name}");
Console.WriteLine($"label={label}");
}
}
using System;
interface ILabel
{
string Label();
}
class NameTag : ILabel
{
private readonly string name;
public NameTag(string name)
{
this.name = name;
}
public string Label()
{
return "tag:" + name;
}
}
class Program
{
static void Main()
{
string name = "Bo";
NameTag tag = new NameTag(name);
string label = tag.Label();
Console.WriteLine($"name={name}");
Console.WriteLine($"label={label}");
}
}
using System;
interface ILabel
{
string Label();
}
class NameTag : ILabel
{
private readonly string name;
public NameTag(string name)
{
this.name = name;
}
public string Label()
{
return "tag:" + name;
}
}
class Program
{
static void Main()
{
string name = "Cleo";
NameTag tag = new NameTag(name);
string label = tag.Label();
Console.WriteLine($"name={name}");
Console.WriteLine($"label={label}");
}
}
name ← Ari
24{25 static void Main()26 {27 string name→ Ari = "Ari"; //@name="Bo", "Cleo"28 NameTag tag = new NameTag(name);29 string label = tag.Label();this.name ← Ari
12public NameTag(string nameAri)13{14 this.name→ Ari = nameAri;15}tag ← NameTag
27string name = "Ari"; //@name="Bo", "Cleo"28NameTag tag→ NameTag = new NameTag(name);29string label = tagNameTag.Label();public string Label()
17public string Label()18{19 return "tag:" + nameAri;20}label ← tag:Ari
28 NameTag tag = new NameTag(name);29 string label→ tag:Ari = tagNameTag.Label();3031 Console.WriteLine($"name={nameAri}");32 Console.WriteLine($"label={labeltag:Ari}");33}outputname=Ari label=tag:Ari
name ← Bo
24{25 static void Main()26 {27 string name→ Bo = "Bo";28 NameTag tag = new NameTag(name);29 string label = tag.Label();this.name ← Bo
12public NameTag(string nameBo)13{14 this.name→ Bo = nameBo;15}tag ← NameTag
27string name = "Bo";28NameTag tag→ NameTag = new NameTag(name);29string label = tagNameTag.Label();public string Label()
17public string Label()18{19 return "tag:" + nameBo;20}label ← tag:Bo
28 NameTag tag = new NameTag(name);29 string label→ tag:Bo = tagNameTag.Label();3031 Console.WriteLine($"name={nameBo}");32 Console.WriteLine($"label={labeltag:Bo}");33}outputname=Bo label=tag:Bo
name ← Cleo
24{25 static void Main()26 {27 string name→ Cleo = "Cleo";28 NameTag tag = new NameTag(name);29 string label = tag.Label();this.name ← Cleo
12public NameTag(string nameCleo)13{14 this.name→ Cleo = nameCleo;15}tag ← NameTag
27string name = "Cleo";28NameTag tag→ NameTag = new NameTag(name);29string label = tagNameTag.Label();public string Label()
17public string Label()18{19 return "tag:" + nameCleo;20}label ← tag:Cleo
28 NameTag tag = new NameTag(name);29 string label→ tag:Cleo = tagNameTag.Label();3031 Console.WriteLine($"name={nameCleo}");32 Console.WriteLine($"label={labeltag:Cleo}");33}outputname=Cleo label=tag:Cleo