当前位置: 代码迷 >> C# >> Obsolete属性并不能发生编译警告
  详细解决方案

Obsolete属性并不能发生编译警告

热度:36   发布时间:2016-05-05 03:19:58.0
Obsolete属性并不能产生编译警告啊
例如,我有下面这样的一个类:

public class a
{
public string _name;
[property: CLSCompliant(false), Obsolete("该淘汰了")]
public string name { get { return _name; } set { _name = value; } }
public string methoda(string s){_name =s;return _name;}
public a(string s){Console.WriteLine("ctor {0}",s);}
[Obsolete("能否产生编译警告")]
void f() { }
}

这里一个属性name一个方法f都有Obsolete特性修饰,但是并没有因此产生编译警告啊。我是编译的debug/release版,发现一样
那么这个Obsolete何时才能产生编译时的某种警告呢?

------解决思路----------------------
调用Obsolete成员,才会产生警告。

        static void Main(string[] args)
        {
            string name = new a("").name;
        }

之所以用Obsolete,而不直接去掉,是为了保此对旧版本的支持。
Obsolete成员的存在本身是有意义的。
不应该对有意义的存在产生警告。

------解决思路----------------------
引用:
调用Obsolete成员,才会产生警告。

        static void Main(string[] args)
        {
            string name = new a("").name;
        }

之所以用Obsolete,而不直接去掉,是为了保此对旧版本的支持。
Obsolete成员的存在本身是有意义的。
不应该对有意义的存在产生警告。

+1
  相关解决方案