c# 属性类(特性)
2021-03-08 01:27
标签:line required instance adk OLE als for 开发 其他 c# 属性类也称做特性。这是一篇垫文,为后面的过滤器和其他特性类的东西做铺垫。 看一段代码: 然后发现不会有任何输出; 然后我加上#define release; 结果: 那么我们明白原来这个是否执行是根据是否预处理来判断的,这使得我们程序变得很方便。 再举一个例子: 我们在开发一个项目中,如果我们废弃了代码,我们是不会去立即删除的,因为需要回顾历史。 这时候显示的是: 当然有时候我们是不会让他报错的,只需要警告。 好了,既然属性这么好用不如我们就来自定义吧! 就用验证来举例子吧! 要实现属性就要继承属性! 在属性类上我们可以加一些特性,AttributeUsage。 比如说: AttributeTargets 表示的是作用于什么位置,你可以限制是类或者属性等等。 AllowMultiple 是否可以有多个属性,因为验证有验证是否为空、验证是长度等等,需要为true。 Inherited 这个是否可继承,一般是可继承的。 下面以不为空来举例: 上面我继承了BaseAttribute,实现BaseAttribute里面的方法和属性。 下面我又一个student类: 那么我给Name值不能为空的属性。 同样我们要去实现验证过程,为了解耦,需要加一个helper类; 上面的原理非常简单,就是遍历一个泛型里面的属性,找到里面的特性进行判断。 我们需要书写的判断过程如下: 得到的结果: 介绍完毕! c# 属性类(特性) 标签:line required instance adk OLE als for 开发 其他 原文地址:https://www.cnblogs.com/aoximin/p/12801337.html前言
正文
static void Main(string[] args)
{
Attribitefunc1.printMesssage("卡特林");
Console.ReadLine();
}
///
static void Main(string[] args)
{
Attribitefunc1.printMesssage("卡特林");
Console.ReadLine();
}
///
[Obsolete("this is old",false)]
[AttributeUsage(AttributeTargets.Property,AllowMultiple =true,Inherited =true)]
public abstract class BaseAttribute:Attribute
{
public virtual string error { get; set; }
public abstract bool Validate(object value);
}
public class RequiredAttribute : BaseAttribute
{
public override string error {
get {
if (base.error != null)
{
return base.error;
}
return "属性不能为空";
}
set { base.error = value;
}
}
public override bool Validate(object value)
{
return !(value == null);
}
}
public class Student
{
private string name;
[Required]
public string Name { get => name; set => name = value; }
}
public class ValidateHelper
{
public static string Validate
Student student = new Student();
var errormessage=ValidateHelper.Validate(student);
Console.WriteLine(errormessage);
Console.ReadKey();
下一篇:kafka基础命令及api使用