【问题标题】:Can validation be coded in the class with the following error? Inconsistent Accessibility: Parameter Type Is Less Accessible Than Method [duplicate]验证可以在类中编码并出现以下错误吗?可访问性不一致:参数类型的可访问性不如方法 [重复]
【发布时间】:2017-10-25 20:24:43
【问题描述】:

我的项目有 3 个类。一个带有文本框和 datetimepicker 的表单类,一个名为 BuildingPermit 的类和一个名为 Validator 的类。

我正在使用 Validator 类来处理通用数据验证,例如无论文本框是否为空白或是否有足够的字符都会引发错误。

我还想在 Validator 类中创建一个方法,将文本框中的值与值列表进行比较,以查看它是否已经存在。我已经编写了下面的方法,但遇到了不一致的可访问性错误。

您能否帮我理解为什么当我将建筑许可类访问权限更改为内部时仍然出现错误?还是我必须直接在表单中处理验证?

谢谢

      public static bool IsUniquePermit(TextBox textbox, List<BuildingPermit> buildingPermitList)
    {
        foreach (BuildingPermit bp in buildingPermitList)
        {
            if (textbox.Text == bp.permitNo)
            {
                MessageBox.Show("That permit number has been previously issued");
                return false;
            }
            else
            {
                return true;
            }
        }
    }

作为参考,BuildingPermit 类如下。

  class BuildingPermit
{
    DateTime _issuanceDate;
    string _permitNo;

    public BuildingPermit(DateTime issuanceDate, string permitNo)
    {
        _issuanceDate = issuanceDate;
        _permitNo = permitNo;
    }


    public DateTime issuanceDate
    {
        get
        {
            return _issuanceDate;
        }

        set
        {
            _issuanceDate = value;
        }
    }

    public string permitNo
    {
        get
        {
            return _permitNo;
        }
        set
        {
            _permitNo = value;
        }
    }
}

}

【问题讨论】:

  • 问题是你声明了一个公共方法,它需要一个内部的东西列表
  • 您的问题解决了吗?
  • 是的,我最终将课程公开

标签: c# class validation methods


【解决方案1】:

如果未指定,默认类访问级别为internal。假设具有IsUniquePermit 方法的类是公共的,那么您将BuildingPermit 类作为公共API 的一部分公开,但该类不可用。简短的回答是公开BuildingPermit。

更多信息在这里:https://stackoverflow.com/a/2521492/149436

【讨论】:

    【解决方案2】:

    您可以创建一个公共接口并将类保持在内部。

    public interface IBuildingPermit
    {
    
        public DateTime issuanceDate
        {
            get;
            set;
        }
    
        public string permitNo
        {
            get;
            set;
        }
    }
    

    在你的课堂上实现它:

    class BuildingPermit : IBuildingPermit
    {
        DateTime _issuanceDate;
        string _permitNo;
    
        public BuildingPermit(DateTime issuanceDate, string permitNo)
        {
            _issuanceDate = issuanceDate;
            _permitNo = permitNo;
        }
    
    
        public DateTime issuanceDate
        {
            get
            {
                return _issuanceDate;
            }
    
            set
            {
                _issuanceDate = value;
            }
        }
    
        public string permitNo
        {
            get
            {
                return _permitNo;
            }
            set
            {
                _permitNo = value;
            }
        }
    }
    

    然后像这样改变方法:

    public static bool IsUniquePermit(TextBox textbox, List<IBuildingPermit> buildingPermitList)
        {
            foreach (IBuildingPermit bp in buildingPermitList)
            {
                if (textbox.Text == bp.permitNo)
                {
                    MessageBox.Show("That permit number has been previously issued");
                    return false;
                }
                else
                {
                    return true;
                }
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多