C# 可访问性不一致:类中的属性类型的可访问性不如接口中的属性类型

C# 可访问性不一致:类中的属性类型的可访问性不如接口中的属性类型,c#,.net,interface,enums,C#,.net,Interface,Enums,不确定这里出了什么问题,但我正在尝试在我创建的接口中使用枚举 当我试图实现接口时,我得到了错误 可访问性不一致:属性类型“System.Collections.Generic.IList”的可访问性不如属性“BusinessEntities.ICloneMessage.AgentAddresses” 枚举 namespace BusinessEntities { public class AddressTypeValues { [DataContract(Name

不确定这里出了什么问题,但我正在尝试在我创建的接口中使用枚举

当我试图实现接口时,我得到了错误

可访问性不一致:属性类型“System.Collections.Generic.IList”的可访问性不如属性“BusinessEntities.ICloneMessage.AgentAddresses”

枚举

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
接口中不能有Nullable
string
属性。
string
已经是Nullable类了。您不能将
设置为空。删除问号。@Neal,这是完全不同的错误,
string
已经是可空的,它是引用类型,请使用
string?
删除
<代码>可空
用于值类型,而不是引用类型