C# 重命名附带库中的公共类
我有一个已经发布的库(内部,但仍然发布),我想在库中重命名一个公共类 我想要的是一种确保C# 重命名附带库中的公共类,c#,dll,deprecated,backwards-compatibility,C#,Dll,Deprecated,Backwards Compatibility,我有一个已经发布的库(内部,但仍然发布),我想在库中重命名一个公共类 我想要的是一种确保 客户端代码继续工作 客户端代码在使用类名进行编译时收到一个弃用警告 是否有任何方法可以以某种方式对类进行别名,从而显示上述属性 将来有没有办法避免这个问题(除了确保类的命名和拼写正确之外?)请注意,我希望保留一个公共构造函数,因此使用接口不会解决所有问题 您可以为类提供任何公共别名,但可以将所有公共属性、方法等转发到重命名类的私有实例,并使用过时属性修饰类: [Obsolete("Please use L
- 客户端代码继续工作
- 客户端代码在使用类名进行编译时收到一个弃用警告
- 是否有任何方法可以以某种方式对类进行别名,从而显示上述属性
- 将来有没有办法避免这个问题(除了确保类的命名和拼写正确之外?)请注意,我希望保留一个公共构造函数,因此使用接口不会解决所有问题
[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...");
}
}
根据旧类的公共部分的大小,这项工作可能会非常繁琐,但您无能为力。您可以为该类提供任何公共别名,但可以将所有公共属性、方法等转发到重命名类的私有实例,并用过时属性修饰该类:
[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...");
}
}
根据旧类的公共部分的大小,这项工作可能会非常乏味,但您无能为力。在我的情况下,接口没有更改,因此public
DoTheOldWay()
或doitinomeotherway()
仅在类名上没有问题。如果只有类名是and issue,您可以重命名该类,并使用原始名称创建其子类。这个子类将需要定义调用基类构造函数的构造函数,并用ObsoleteAttribute修饰(正如这个答案所建议的),仅此而已。使用新类的代码将接受旧类的实例;遗憾的是,它不会反过来工作。在我的情况下,接口没有更改,因此publicDoTheOldWay()
或doitinotherway()
仅使用类名没有问题。如果只有类名为and issue,则可以重命名该类并创建使用原始名称命名的子类。这个子类将需要定义调用基类构造函数的构造函数,并用ObsoleteAttribute修饰(正如这个答案所建议的),仅此而已。使用新类的代码将接受旧类的实例;不幸的是,它不会反过来工作。