• 接口属性和类属性


    有个问题:

      抽象出来的接口里的一些属性添加了属性验证,比如:

     public interface IModel
        {
            [Required]
            string Name { get; set; }
            [Permission(Configuration = "Debug")]
            void Print();
        }
        //然后实现类,在需要验证的属性上添加验证属性
        public class Model : IModel
        {
            public string Name { get; set; }
    
            [Required]
            public string Keyword { get; set; }
            // 更多Model属性
        }

    一切都看似很正常

    但是后来发现 在接口里添加的一些验证属性都不起作用

    原因是: CLR对基类和接口的处理是不一样的,基类是继承的,所有基类里出现的方法 属性都在子类实现具有同样的效果,但是接口不一样,接口是用来实现的,要求子类必须实现,但是接口有两种实现方式,隐式和显式

    隐式也就是用public的方式实现接口的属性和方法,虽然有相同签名,但是通过反射,可以看到完全不同,所以接口属性和方法上添加的属性验证不会在实现类上继承

    这是CLR作用的,与MVC无关,
    改进方法:1 最简单的但是最麻烦的就是在子类一一添加该验证
    2 把上面的接口改成抽象类

  • 相关阅读:
    BZOJ5104 二次剩余板子
    BZOJ5329 [Sdoi2018]战略游戏 圆方树+虚树
    BZOJ1095 动态点分治
    BZOJ3992: [SDOI2015]序列统计
    kd-tree板子
    thusc2018翻车记
    BZOJ5336 DP套DP
    BZOJ4316 仙人掌DP
    问题 F: 最小花费
    问题 C: 热浪
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5643602.html
Copyright © 2020-2023  润新知