Using "switch" statement on something which plays the role of the type classifier ("Name", in your case) is a typical and a very bad violation of OOP. Also, it looks like you really need some read-only member, not exactly a formal constant.
To get an idea, consider, for example, this:
abstract class Base {
internal abstract string Name { get; }
}
class Derived : Base {
internal override string Name { get { return "Some Name"; } }
}
class AnotherDerived : Base {
internal override string Name { get { return "Some Other Name"; } }
}
Base instance = new Derived();
string name = instance.Name;
—SA