Is C# Missing Traits?
Does C# need "traits"? It's always interesting to look at other programming languages for features that aren't available in your main programming language.
First, what the heck is a trait? Traits are a language construct that is unique to Scala. Let's check out how traits work in Scala.
A trait lives somewhere between what we would call an abstract class and an interface in C#. Traits offer a form of multiple inheritance as you can have many traits on a class and a trait can optionally have behavior as well. You cannot have constructors on a Trait.
Here is an example usage of traits that solves a challenging OOP modeling issue in C#. This example is pulled indirectly from http://joelabrahamsson.com/learning-scala-part-seven-traits/.
abstract class Enemy
trait Flying {
def flyMessage: String
def fly() = println(flyMessage)
}
trait Swimming {
def swim() = println("I'm swimming")
}
trait BreatheFire {
def breathe() = println("I'm breathing fire")
}
class Orc extends Enemy with Swimming
class Dragon extends Enemy with Swimming with Flying with BreathesFire {
val flyMessage = "I'm a good flyer"
}
C# would benefit from having traits similar to Scala in some modeling situations.