c#属性类(特性)

更新时间:2023-08-03 12:51:15 阅读: 评论:0

c#属性类(特性)
前⾔
c# 属性类也称做特性。这是⼀篇垫⽂,为后⾯的过滤器和其他特性类的东西做铺垫。
正⽂
看⼀段代码:
static void Main(string[] args)
{
Attribitefunc1.printMesssage("卡特林");
Console.ReadLine();
}
/// <summary>
/
// Attribitefunc1 is class that provite a print method
/// </summary>
public class Attribitefunc1{
[Conditional("relea")]
public static void printMesssage(string msg)
{
Console.WriteLine("输出数据:"+ msg);
}
}
然后发现不会有任何输出;
然后我加上#define relea;
结果:
那么我们明⽩原来这个是否执⾏是根据是否预处理来判断的,这使得我们程序变得很⽅便。
再举⼀个例⼦:
李书博我们在开发⼀个项⽬中,如果我们废弃了代码,我们是不会去⽴即删除的,因为需要回顾历史。static void Main(string[] args)
{
Attribitefunc1.printMesssage("卡特林");
strangeConsole.ReadLine();
}
/// <summary>
/// Attribitefunc1 is class that provite a print method
/// </summary>
微观世界观后感
public class Attribitefunc1{
[Obsolete("this is old",true)]
public static void printMesssage(string msg)
{
Console.WriteLine("输出数据:"+ msg);
}
}
这时候显⽰的是:
当然有时候我们是不会让他报错的,只需要警告。荔波大小七孔
[Obsolete("this is old",fal)]
好了,既然属性这么好⽤不如我们就来⾃定义吧!
就⽤验证来举例⼦吧!
[AttributeUsage(AttributeTargets.Property,AllowMultiple =true,Inherited =true)]
public abstract class BaAttribute:Attribute
{
public virtual string error { get; t; }
public abstract bool Validate(object value);
}
要实现属性就要继承属性!
在属性类上我们可以加⼀些特性,AttributeUsage。
⽐如说:
AttributeTargets 表⽰的是作⽤于什么位置,你可以限制是类或者属性等等。路上行人
AllowMultiple 是否可以有多个属性,因为验证有验证是否为空、验证是长度等等,需要为true。Inherited 这个是否可继承,⼀般是可继承的。
下⾯以不为空来举例:
public class RequiredAttribute : BaAttribute
{
public override string error {
get {
if (ba.error != null)
{
;
说课的基本步骤
}
return "属性不能为空";
}
t { ba.error = value;
}叶耳粑
}
public override bool Validate(object value)
{
return !(value == null);
}
}
上⾯我继承了BaAttribute,实现BaAttribute⾥⾯的⽅法和属性。
下⾯我⼜⼀个student类:
认识牙齿
public class Student
{
private string name;
[Required]
public string Name { get => name; t => name = value; }
}
那么我给Name值不能为空的属性。
同样我们要去实现验证过程,为了解耦,需要加⼀个helper类;
public class ValidateHelper
{
public static string Validate<T>(T t)
{
Type type = t.GetType();
PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic);  foreach (PropertyInfo propertyInfo in propertyInfos)
{
if (propertyInfo.IsDefined(typeof(BaAttribute)))
{
foreach (BaAttribute attribute in propertyInfo.GetCustomAttributes(typeof(BaAttribute)))
{
if (!attribute.Validate(propertyInfo.GetValue(t, null)))
{
;
}
}
}
}
return null;
}
}
上⾯的原理⾮常简单,就是遍历⼀个泛型⾥⾯的属性,找到⾥⾯的特性进⾏判断。
我们需要书写的判断过程如下:
Student student = new Student();
var errormessage=ValidateHelper.Validate(student);
Console.WriteLine(errormessage);
Console.ReadKey();
得到的结果:
介绍完毕!

本文发布于:2023-08-03 12:51:15,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1106572.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   验证   需要   特性   判断   不会   是否   输出
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图