C# 可访问性不一致:类中的属性类型的可访问性不如接口中的属性类型
不确定这里出了什么问题,但我正在尝试在我创建的接口中使用枚举 当我试图实现接口时,我得到了错误 可访问性不一致:属性类型“System.Collections.Generic.IList”的可访问性不如属性“BusinessEntities.ICloneMessage.AgentAddresses” 枚举C# 可访问性不一致:类中的属性类型的可访问性不如接口中的属性类型,c#,.net,interface,enums,C#,.net,Interface,Enums,不确定这里出了什么问题,但我正在尝试在我创建的接口中使用枚举 当我试图实现接口时,我得到了错误 可访问性不一致:属性类型“System.Collections.Generic.IList”的可访问性不如属性“BusinessEntities.ICloneMessage.AgentAddresses” 枚举 namespace BusinessEntities { public class AddressTypeValues { [DataContract(Name
namespace BusinessEntities
{
public class AddressTypeValues
{
[DataContract(Name = "AddressType")]
public enum AddressType
{
[EnumMember(Value = "Home")]
Home,
[EnumMember(Value = "Mailing")]
Mailing,
[EnumMember(Value = "Location")]
Location,
[EnumMember(Value = "Other")]
Other
}
}
}
接口
namespace BusinessEntities
{
public interface IAgentAddress
{
AddressTypeValues.AddressType AddressType { get; set; }
String? Street1 { get; set; }
String? Street2 { get; set; }
String? Street3 { get; set; }
String? City { get; set; }
String? State { get; set; }
String? ZipCode { get; set; }
}
}
namespace BusinessEntities
{
[DataContract]
public class CloneMessage : ICloneMessage
{
[DataMember]
public AgentTransmission AgentInformation { get; set; }
[DataMember]
public IList<AgentAddress> AgentAddresses { get; set; }
[DataMember]
public IList<RelationshipCode> RelationshipCodes { get; set; }
[DataMember]
public string? ErrorMessages { get; set; }
public CloneMessage(){}
}
}
namespace BusinessEntities
{
[DataContract]
public class AgentAddress : IAgentAddress
{
[DataMember]
public AddressTypeValues.AddressType AddressType { get; set; }
[DataMember]
public string Street1 { get; set; }
[DataMember]
public string Street2 { get; set; }
[DataMember]
public string Street3 { get; set; }
[DataMember]
public string City { get; set; }
[DataMember]
public string State { get; set; }
[DataMember]
public string ZipCode { get; set; }
}
}
使用AddresType的类
namespace BusinessEntities
{
public interface IAgentAddress
{
AddressTypeValues.AddressType AddressType { get; set; }
String? Street1 { get; set; }
String? Street2 { get; set; }
String? Street3 { get; set; }
String? City { get; set; }
String? State { get; set; }
String? ZipCode { get; set; }
}
}
namespace BusinessEntities
{
[DataContract]
public class CloneMessage : ICloneMessage
{
[DataMember]
public AgentTransmission AgentInformation { get; set; }
[DataMember]
public IList<AgentAddress> AgentAddresses { get; set; }
[DataMember]
public IList<RelationshipCode> RelationshipCodes { get; set; }
[DataMember]
public string? ErrorMessages { get; set; }
public CloneMessage(){}
}
}
namespace BusinessEntities
{
[DataContract]
public class AgentAddress : IAgentAddress
{
[DataMember]
public AddressTypeValues.AddressType AddressType { get; set; }
[DataMember]
public string Street1 { get; set; }
[DataMember]
public string Street2 { get; set; }
[DataMember]
public string Street3 { get; set; }
[DataMember]
public string City { get; set; }
[DataMember]
public string State { get; set; }
[DataMember]
public string ZipCode { get; set; }
}
}
名称空间业务实体
{
[数据合同]
公共类克隆消息:ICloneMessage
{
[数据成员]
公共代理传输代理信息{get;set;}
[数据成员]
公共IList代理{get;set;}
[数据成员]
公共IList关系代码{get;set;}
[数据成员]
公共字符串?错误消息{get;set;}
公共CloneMessage(){}
}
}
命名空间业务实体
{
[数据合同]
公共类代理地址:IAgentAddress
{
[数据成员]
public AddressTypeValues.AddressType AddressType{get;set;}
[数据成员]
公共字符串Street1{get;set;}
[数据成员]
公共字符串Street2{get;set;}
[数据成员]
公共字符串Street3{get;set;}
[数据成员]
公共字符串City{get;set;}
[数据成员]
公共字符串状态{get;set;}
[数据成员]
公共字符串ZipCode{get;set;}
}
}
您的代码中有几个错误
首先。您的类
AgentAddress
未标记为public
。这就是为什么会出现错误。您的类可能没有使用任何访问说明符定义,它被认为是内部的
。将类公开将删除错误
代码中的第二个问题是您正在使用String?
。可能正在尝试将字符串设置为字符串已经是引用类型,它可以保留null。您需要用字符串?
删除?
。因此,您的界面如下所示:
public interface IAgentAddress
{
AddressTypeValues.AddressType AddressType { get; set; }
String Street1 { get; set; }
String Street2 { get; set; }
String Street3 { get; set; }
String City { get; set; }
String State { get; set; }
String ZipCode { get; set; }
}
Nullable
或type with?
用于值类型,因为值类型不能像int?
或Nullable
那样保持null
首先。您的类AgentAddress
未标记为public
。这就是为什么会出现错误。您的类可能没有使用任何访问说明符定义,它被认为是内部的
。将类公开将删除错误
代码中的第二个问题是您正在使用String?
。可能正在尝试将字符串设置为字符串已经是引用类型,它可以保留null。您需要用字符串?
删除?
。因此,您的界面如下所示:
public interface IAgentAddress
{
AddressTypeValues.AddressType AddressType { get; set; }
String Street1 { get; set; }
String Street2 { get; set; }
String Street3 { get; set; }
String City { get; set; }
String State { get; set; }
String ZipCode { get; set; }
}
Nullable
或type with?
用于值类型,因为值类型不能像int?
或Nullable
那样保持null
,您的类AgentAddress
可能是内部的,如果有人告诉我在IAgentAddress
接口中不能有可为null的string
属性,则将其设置为公共类。string
已经是可为null的类。您不能将设置为空。删除问号。@Neal,这是完全不同的错误,string
已经是可空的,它是引用类型,请使用string?
删除?
Nullable
用于值类型,而不是引用类型您的类AgentAddress
可能是internal
,将其设置为公共类如果我这样做,我被告知在IAgentAddress
接口中不能有Nullablestring
属性。string
已经是Nullable类了。您不能将设置为空。删除问号。@Neal,这是完全不同的错误,string
已经是可空的,它是引用类型,请使用string?
删除?
<代码>可空
用于值类型,而不是引用类型