日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
五分鐘完全弄懂C#特性

[[403900]]

前言

在工作或者學(xué)習(xí)中,難免或多或少的接觸到特性這個東西,可能你不太清楚什么是特性,那么我給大家舉兩個例子 [Obsolete],[HttpGet],[HttpPost],[Serizlized],[AuthorizeFilter] (總有你見過的一個吧) 。有沒有覺得好熟悉,下面跟著小趙一探究竟。

成都創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)興寧,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

特性(Attribute)用于添加元數(shù)據(jù),如編譯器指令和注釋、描述、方法、類等其他信息。

特性(Attribute)的名稱和值是在方括號內(nèi)規(guī)定的,放置在它所應(yīng)用的元素之前。positional_parameters 規(guī)定必需的信息,name_parameter 規(guī)定可選的信息。

特性的定義

特性的定義:直接或者間接的繼承 Attribute 類

定義完就直接可以在方法前面用 [CustomAttribute] 可以省略 Attribute 寫成[Custom]

在特性類上面的特性 /// AttributeTargets.All --可以修飾的應(yīng)用屬性 /// AllowMultiple = true ---是否可以進(jìn)行多次修飾 [AttributeUsage(AttributeTargets.All,AllowMultiple = true)]圖片

特性的使用

特性本身是沒有啥用,但是可以通過反射來使用,增加功能,不會破壞原有的封裝 通過反射,發(fā)現(xiàn)特性 --實例化特性--使用特性 通過特性獲取表名(orm)就是一個很好的案例

首先定義個類,假裝和數(shù)據(jù)庫中的表結(jié)構(gòu)一樣,但表明是t_student 可以通過兩個方法來獲取表名(方法1加字段,或者擴(kuò)展方法tostring,但都破壞了以前的封裝,不提倡這樣做),然后就用到今天學(xué)習(xí)的特性attribute了

 
 
 
 
  1. public class Student 
  2.    { 
  3.         //public static string tablename = "t_student"; 
  4.        //public string tostring() 
  5.        //{ 
  6.        //    return "t_student"; 
  7.        //} 
  8.        public  int id { get; set; } 
  9.        public string Name { get; set; } 
  10.        public int Sex { get; set; } 
  11.    } 

在定義特性類TableNameAttribute

 
 
 
 
  1. //1.聲明 
  2.      public  class TableNameAttribute:Attribute 
  3.      { 
  4.          private string _name = null; 
  5.          //初始化構(gòu)造函數(shù) 
  6.         public  TableNameAttribute(string tablename) 
  7.         { 
  8.             this._name = tablename; 
  9.         } 
  10.  
  11.         public string GetTableName() 
  12.         { 
  13.             return this._name; 
  14.         } 
  15.      } 

然后再student前面加上自定義特性

實現(xiàn)特性的擴(kuò)展方法

 
 
 
 
  1. //通過反射獲取表名 
  2.        public static string GetName(Type type) 
  3.        { 
  4.            if (type.IsDefined(typeof(TableNameAttribute),true)) 
  5.            { 
  6.                TableNameAttribute attribute =(TableNameAttribute)type.GetCustomAttribute(typeof(TableNameAttribute), true); 
  7.  
  8.                return attribute.GetTableName(); 
  9.            } 
  10.            else 
  11.            { 
  12.              return  type.Name; 
  13.            } 
  14.        } 

F5執(zhí)行,查看運(yùn)行結(jié)果

 

總結(jié)

特性本身是沒有啥用,但是可以通過反射來使用,增加功能,不會破壞原有的封裝 項目我放在我的github[1]https://github.com/PrideJoy/NetTemple/tree/master/%E7%89%B9%E6%80%A7


分享文章:五分鐘完全弄懂C#特性
當(dāng)前鏈接:http://www.5511xx.com/article/dpheddj.html