public class StringTransformer {
public StringTransformer(string author) {
public virtual string Transform(string s) {
public class BillsTransformer : StringTransformer {
public BillsTransformer() : base("bill") {
public override string Transform(string s) {
for (int i = s.Length-1; i >= 0; i--) {
public class jacobTransformer : StringTransformer {
public jacobTransformer() : base("jacob") {
public override string Transform(string s) {
s = s.ToUpper() + " bing bong";
public static void Main()
StringTransformer basic = new StringTransformer("shepherd");
BillsTransformer btrans = new BillsTransformer();
jacobTransformer jtrans = new jacobTransformer();
string result = jtrans.Transform(btrans.Transform(basic.Transform("cheese")));
result = jtrans.Transform(result);
Console.WriteLine(result);