如果向后兼容性不是问题,将删除哪些C#功能?

时间:2009-11-04 18:17:52

标签: c#

向后兼容性是语言设计者最关心的问题,特别是当语言像C#一样受欢迎时。随着时间的推移,语言会积累过时的功能。避免使用这些功能被认为是一种很好的做法,但它们保留在与旧版本兼容的语言中。

如果向后兼容性不是问题,应删除C#中的哪些语言功能或基类库?

我不是在问一些开发人员喜欢和其他人讨厌的功能。我对通常认为最好避免的功能感兴趣(可能因为现在有一种更好的方法可以做同样的事情)。

10 个答案:

答案 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:

  1. COM Interop
  2. StringCollection(通用列表)
  3. StringDictionary(Generic Dictionary)

答案 9 :(得分:-18)

通用列表(如Reshure所述),包括“var”。我是明确声明变量的支持者。

编辑:我认为人们将“通用列表”与“泛型”等同起来。如果您愿意,可以使用“无类型集合”,例如Hashtable或ArrayList。