Thread.currentThread().isInterrupted()
或
public class Foo<T>
{
private class NestedWrapper
{
T Value;
}
private NestedWrapper MyNested;
}
在C#中,这两种方法之间是否有真正的区别?第二个中的其他public class Foo<T>
{
private class NestedWrapper<S>
{
S Value;
}
private NestedWrapper<T> MyNested;
}
除外。
请注意,私有化有些重要,因为嵌套类无法从外部访问。并且我们可以假设<T>
类将始终与其“父级”共享通用类型NestedWrapper
。
编辑:我实际上正在通过Java实现T
:http://fuseyism.com/classpath/doc/java/util/concurrent/atomic/AtomicMarkableReference-source.html在以下方面重新实现该类(它是Java标准库的一部分) C#。正如您在Java中看到的那样,使用了第二种样式。我什至不确定第一种样式在Java中是否有效(因为我不是Java程序员),但是在C#中我们仍然有两种可能的方法。我只是想知道是否有任何理由要优先于另一个。
答案 0 :(得分:1)
这两种方法之间真的有区别吗?
是的,有一个真正的区别,因为NestedWrapper
有自己的类型参数,而与Foo
自己的类型参数无关。因此,实际类型可能完全不相关。
在第一种情况下,T
被固定在NextedWrapper
中,因此您没有机会为另一种类型创建包装器。
在第二种情况下,以下情况非常好:
private NestedWrapper<T> nestedWrappedT;
private NestedWrapper<int> nestedWrappedInt;
private NestedWrapper<string> nestedWrappedString;
仅凭private
的事实就没有区别。
答案 1 :(得分:0)
在第一种方法中,为您的外部类设置T
,然后在类中的任何地方使用它都不能更改(没有其他泛型类型,您将被绑定到T
)。
在第二种方法中,您可以为外部和内部类分别设置通用类型。但是,由于此类是私有的,因此您将无法从类外部设置此通用参数。
区别在于您的类中有通用类(第二种方法)。您可以选择任何类型在班级内部使用它。 但是您无法从课堂之外对其进行控制。
在第一种方法中,您可以从类外部确定内部类应使用哪种类型。您可以从外部控制传递给内部类的泛型类型。