C# 命名空间/类型编译器错误
我有一个C#,里面有一个班级C# 命名空间/类型编译器错误,c#,web-services,C#,Web Services,我有一个C#,里面有一个班级 namespace TestBL { public class Test { public int Id { get; set; } public string PostedBy { get; set; } public string Text { get; set; } } } 然后,我添加一个Web服务,其中包含: using System; using System.Collection
namespace TestBL
{
public class Test
{
public int Id { get; set; }
public string PostedBy { get; set; }
public string Text { get; set; }
}
}
然后,我添加一个Web服务,其中包含:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using TestBL;
namespace Test.WebService
{
[ServiceContract]
public interface ITestService
{
[OperationContract]
IList<Test> GetTest();
}
}
但是我想知道为什么会出错。您的
ITestService
接口位于Test.WebService
命名空间中。这意味着Test
是一个名称空间。是的,我知道名称空间的名称是Test.WebService
,但是C#编译器将名称空间名称用点分割,因此Test
是名称空间,而WebService是Test
中的名称空间
当您尝试使用Test
类时,编译器非常愚蠢,认为您正在尝试编写一个namesapce,这就是错误发生的原因
总结:
发生错误的原因很简单,因为编译器认为Test是一个名称空间,在该名称空间中,有一个名为WebService的名称空间。明白吗?换句话说,C#编译器是愚蠢的(我只是开玩笑)这里是名称空间测试-
namespace Test.WebService // namepace WebService inside namespace Test.
而且它也是一个等级-
public class Test.
编译器不知道您使用哪一个,请更改类名。您使用的是嵌套命名空间Test.WebService,它相当于:
namespace Test
{
namespace WebService
{
[ServiceContract]
public interface ITestService
{
[OperationContract]
IList<Test> GetTest();
}
}
}
名称空间测试
{
命名空间Web服务
{
[服务合同]
公共接口ITestService
{
[经营合同]
IList GetTest();
}
}
}
外部命名空间(Test)正在导致与类Test的命名冲突。我还想补充一点,作为一种解决方法,在不更改任何名称的情况下,只需使用TestBL在命名空间内移动
,如下所示:
namespace Test.WebService
{
//other using
using TestBL;
[ServiceContract]
public interface ITestService
{
[OperationContract]
IList<Test> GetTest();
}
}
namespace Test.WebService
{
//其他用途
使用TestBL;
[服务合同]
公共接口ITestService
{
[经营合同]
IList GetTest();
}
}
这不会返回错误,我发现,也许有人会觉得这很有用。命名空间名称和类名在同一个项目中必须不同TestBL和Test的名称如何相同?请看Test.WebService
Test.WebService
为您提供了命名空间Test
和子命名空间WebService
…您的意思是编译器只识别周期之前的东西吗,那么WebService
是否存在不可见?不带句号的命名TestWebService
可以解决这个问题吗?
namespace Test.WebService
{
//other using
using TestBL;
[ServiceContract]
public interface ITestService
{
[OperationContract]
IList<Test> GetTest();
}
}