向后兼容性是语言设计者最关心的问题,特别是当语言像C#一样受欢迎时。随着时间的推移,语言会积累过时的功能。避免使用这些功能被认为是一种很好的做法,但它们保留在与旧版本兼容的语言中。
如果向后兼容性不是问题,应删除C#中的哪些语言功能或基类库?
我不是在问一些开发人员喜欢和其他人讨厌的功能。我对通常认为最好避免的功能感兴趣(可能因为现在有一种更好的方法可以做同样的事情)。
答案 0 :(得分:16)
<强>的ArrayList 强>
使用它没有意义了。列表与LT;&GT;更好。
答案 1 :(得分:13)
我听说有几位C#设计师提到他们后悔制作数组covariant。
答案 2 :(得分:4)
我知道这是一个明显的答案,但标有[Obsolete]
属性的任何类,属性或方法可能都是第一个被删除的。
答案 3 :(得分:2)
默认情况下为非密封类型。
答案 4 :(得分:2)
在实施IEnumerable<T>
时,出于向后兼容性原因,您还必须实施IEnumerator<T> GetEnumerator()
以及System.Collections.IEnumerator GetEnumerator()
。
答案 5 :(得分:1)
ReaderWriterLock
类现在基本没有意义,因为ReaderWriterLockSlim
类,微软自己说is recommended for all new development。
答案 6 :(得分:1)
命名属性构造函数参数。
目前,您使用以下命令设置命名参数:
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
这是从C#1开始,但现在有对象构造函数:
new Foo(explicit, values) { Implicit = value }
这将导致以下属性构造函数:
[AttributeUsage(AttributeTargets.Method) { Inherited = false, AllowMultiple = true }]
答案 7 :(得分:0)
System.IO.Path.InvalidPathChars
字段。使用它会带来安全风险,但出于兼容性原因,他们无能为力。
答案 8 :(得分:-2)
来自BCL:
答案 9 :(得分:-18)
通用列表(如Reshure所述),包括“var”。我是明确声明变量的支持者。
编辑:我认为人们将“通用列表”与“泛型”等同起来。如果您愿意,可以使用“无类型集合”,例如Hashtable或ArrayList。