Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否废弃整个命名空间?_.net_Attributes_Namespaces_Obsolete - Fatal编程技术网

.net 是否废弃整个命名空间?

.net 是否废弃整个命名空间?,.net,attributes,namespaces,obsolete,.net,Attributes,Namespaces,Obsolete,我可以在.NET Framework(3.5和4)中以某种方式将整个命名空间标记为已过时,还是将整个项目标记为已过时?这是不可能的。我想原因是名称空间可以跨越不同的程序集,甚至库的用户也可以使用相同的名称空间,所以它不仅会过时您的代码。名称空间基本上是名称前缀的语法糖。命名空间甚至不能作为属性的目标。过时属性不能应用于命名空间。“过时”属性装饰有 [AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct |

我可以在.NET Framework(3.5和4)中以某种方式将整个命名空间标记为已过时,还是将整个项目标记为已过时?

这是不可能的。我想原因是名称空间可以跨越不同的程序集,甚至库的用户也可以使用相同的名称空间,所以它不仅会过时您的代码。名称空间基本上是名称前缀的语法糖。命名空间甚至不能作为属性的目标。

过时属性不能应用于命名空间。“过时”属性装饰有
[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargetGets.Delegate,Inherited=false]

您不能将整个命名空间标记为过时,但如果您拥有命名空间中的所有代码,则可以使用继承同时拥有两个命名空间:

namespace New.Namespace
{
    /// <summary>
    /// Application contract
    /// </summary>
    public class Application
    {
        /// <summary>
        /// Application Name
        /// </summary>
        public string ApplicationName { get; set; }
        /// <summary>
        /// Application Id
        /// </summary>
        public int ApplicationId { get; set; }
    }
}


namespace old.namespace
{
    /// <summary>
    /// Application contract
    /// </summary>
    [Obsolete]
    public class Application : New.Namespace.Application
    {       

    }
}
名称空间新建。名称空间
{
/// 
///申请合同
/// 
公共类应用程序
{
/// 
///应用程序名称
/// 
公共字符串ApplicationName{get;set;}
/// 
///应用程序Id
/// 
public int ApplicationId{get;set;}
}
}
名称空间old.namespace
{
/// 
///申请合同
/// 
[过时]
公共类应用程序:New.Namespace.Application
{       
}
}

您必须对旧命名空间中的所有类(枚举、结构等)执行此操作,以提供向后和向前兼容性。

命名空间不能标记为已过时,这可能是将程序集标记为已过时的重复项:@Vijay相关主题,但不是重复的。最终将项目和命名空间重命名为Foo.obsolite.Bar。在这种情况下有效,因为它仅在同一解决方案中使用