You can' provide any public alias name to the class, but you can forward all public properties, methods, etc. to a private instance of the renamed class and decorate the class with the obsolete attribute:
[Obsolete("Please use LatestGreatest instead.")]
public class OldSchool
{
private LatestGreatest _Target;
public OldSchool()
{
_Target = new LatestGreatest();
}
public void DoSomething()
{
_Target.DoSomething();
}
[Obsolete("Please use LatestGreatest.DoItInSomeOtherWay()")]
public void DoTheOldWay()
{
_Target.DoItInSomeOtherWay();
}
}
public class LatestGreatest
{
public void DoSomething()
{
Console.WriteLine("I'm so fresh and cool.");
}
public void DoItInSomeOtherWay()
{
Console.WriteLine("Let's do it...");
}
}
Depending on the size of the public side of your old class this work can be quite tedious, but there is nothing else you can do.