接口属性和类属性

有个问题:

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

 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 把上面的接口改成抽象类

转载于:https://www.cnblogs.com/niuzaihenmang/p/5643602.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值