C#特性
2021-03-03 03:29
标签:无法 sage pre oid var attr ESS nbsp set 什么是特性?你每天上班去公司的时候,都要打开门进去公司工作。突然有一天公司倒闭了,公司的门上贴了一个封条,此时我们已经不能进去大门了,就这一个标签贴着我们就真的进不去大门了吗?那肯定不是,只不过这个封条有法律效应,你要是违反了那你就是在和法律作对。那么这个封条标签就类似于特性,它可以让你进入公司之前走一些流程,或者不让你进去公司。 例如Obsolete:表示该特性已过时。 当我们实例化该类的时候,编译器直接告诉我们该类已过时,运行的时候直接报错。 我们选择Obsolete按F12进去,我们可以看到ObsoleteAttribute继承Attribute,里面有Message和Error属性,再接着就是几个构造函数了。有人就会有疑问了,就这两个东西就能让编译器警告?当然不是了,之所以它能让编译器警告,是因为编译器对它进行了语义分析。那么我可以继承它自己也写一个特性让编译出错吗?你再仔细看下ObsoleteAttribute是不是有一个关键字sealed,这个关键字直接让你无法继承它。那么我们可以继承Attribute,在写下其他特性,就不要纠结这个了。 自定义特性 好了写到这里就写完了,是不是就大功告成了呢?当然不是了,想要使用它,我们还必须用反射去获取这个特性里面的属性值。mvc框架里面之所以拿来直接用,那是因为它框架里为你处理了这些过程。 调用: 结果: 我们在写一个: 然后我们放到创建的User类上: 调用: 结果: 我们再试试下在枚举中使用特性: 调用: 我们在看看验证一个类型范围: 调用: 只要我们这个ID的范围在1-10以内就符合,否则就报错。 结果: C#特性 标签:无法 sage pre oid var attr ESS nbsp set 原文地址:https://www.cnblogs.com/-zzc/p/12984258.html
[Obsolete("该类已经过时", true)]
public class OldClass
{
[method: Obsolete("该方法已经过时")]
public void OldMethod()
{
Console.WriteLine("我是一个方法");
}
}
//该特性适用于所有的类,而且是非继承的。
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
class OldAttribute : Attribute
{
private string discretion;
public string Discretion
{
get { return discretion; }
set { discretion = value; }
}
public DateTime date;
public OldAttribute(string discretion)
{
this.discretion = discretion;
date = DateTime.Now;
}
}
[Old("我是一个特性")]
public class SampleClass
{
public SampleClass()
{
Console.WriteLine("1111");
}
}
public class NewClass : SampleClass
{
public void NewTest()
{
Console.WriteLine("222");
}
}
public static void GetAttributeInfo(Type t)
{
//检索自定义属性
OldAttribute old = (OldAttribute)Attribute.GetCustomAttribute(t, typeof(OldAttribute));
if (old == null)
{
Console.WriteLine(t.ToString() + "类中自定义特性不存在");
}
else
{
Console.WriteLine("特性描述:{0}\n加入事件时间:{1}", old.Discretion, old.date);
}
}
static void Main(string[] args)
{
GetAttributeInfo(typeof(SampleClass));
Console.WriteLine("=================");
GetAttributeInfo(typeof(NewClass));
}
public class TableNameAttribute : Attribute
{
public TableNameAttribute() { }
public string TableName { get; set; }
}
[TableName(TableName = "Users")]
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
///
///
public enum Sex
{
[Remark("男的")]
boy = 1,
[Remark("女的")]
girl = 2
}
///
EnumExtension.GetRemake(Sex.boy)
///
public class User
{
[IntValidate(1, 10)]
public int Id { get; set; }
public string Name { get; set; }
}
public class BaseDal
{
public static string Insert
string msg = BaseDal.Insert
上一篇:Windows程序设计
下一篇:win10 cnpm