我有一个静态类,我弃用并修改类以强制客户端使用实例变量。
问题是,如何处理允许保留和使用前一个静态类(具有过时属性),并且还允许使用新的非静态类(相同名称,相同的方法名称)?
这可能吗?
答案 0 :(得分:2)
您可以使用多种方式,但没有一种完全您想要的方式:
static
修饰符,使其成为普通的非静态类,并可选择使其成为局部,在第二个文件中实现新的实例相关代码。但是,使用此方法,您将无法废弃整个静态类,因为您只有一个类。如果你让所有旧的静态成员都过时了,我会选择nbr。 1。
答案 1 :(得分:1)
我认为不可能保留相同的名称和参数,但你可以这样做
[Obsolete("This class is obsolete; use class B instead")]
Visual Studio将向用户提示他们应该使用新类。
答案 2 :(得分:0)
不可能使用相同的类名和相同的成员,类型将是不明确的。这通常使用过时属性的消息字段来告诉调用者使用哪个类,在本例中是新实例类。
你可能会想出一些复杂的版本化界面,但即使在最好的情况下,调用者也不清楚,他们必须知道他们正在处理哪个版本。调用者需要以不同方式处理instace和静态类,因此隐藏它们正在使用的只会导致问题(是否可能这样做)。
答案 3 :(得分:0)
您可以做的一件事是通过explicitly implemented interface实现方法的非静态版本,如下所示:
public interface ITest
{
string Foo();
}
// your class
public class Test : ITest
{
//original, static version of Foo
public static string Foo()
{
return "foo";
}
// Foo reimplemented as a non-static method
// note that you need to implement ITest explicitly
// for it to compile
string ITest.Foo()
{
return "foo";
}
}
这可以按预期编译和工作,除非非静态方法只能通过接口调用,即:
ITest t = new Test(); //assigning to a variable of type ITest
Console.WriteLine(t.Foo()); // writes "foo"
Console.WriteLine(Test.Foo()); // and calling the static method still works too