w88优德官网电脑版特征和本性[zt]

发布时间:2019-04-15  栏目:w88优德官网电脑版  评论:0 Comments

attribute是.NET框架引进的有一技术亮点,因而我们有须要花点时间来询问本文的始末,走进贰个意识attribute登堂入室的入口。因为.NET
Framework中使用了多量的定制性格来成功代码约定,
[Serializable]、[Flags]、[DllImport]、[AttributeUsage]那几个的构造,相信大家都见过呢,那么你是否通晓其幕后的本事。

        public string Memo
        {
            get { return _memo; }
            set { _memo = value; }
        }

        //定义属性
        //分明性子和性质不是3遍事儿
        public string Name
        {
            get { return _name == null ? string.Empty : _name; }
        }

四.二. 自定义天性

  1. 概念个性  

     

        [AttributeUsage(AttributeTargets.Class |
            AttributeTargets.Method,
            Inherited = true)]
        public class TestAttribute : System.Attribute
        {
            public TestAttribute(string message)
            {
                Console.WriteLine(message);
            }
            public void RunTest()
            {
                Console.WriteLine(“TestAttribute here.”);
            }
        }

     

  2. 使用指标成分  

            [Test(“Error Here.”)]
            public void CannotRun()
            {
                //
            }

     

  3. 收获成分附加音信

    若果未有怎么机制来在运行期来获取Attribute的叠加音信,那么attribute就一贯不什么样存在的含义。因而,.NET中以反射机制来落到实处在运营期获取attribute消息,完结方式如下:  

     

     

            public static void Main()
            {
                Tester t = new Tester();
                t.CannotRun();

                Type tp = typeof(Tester);
                MethodInfo mInfo = tp.GetMethod(“CannotRun”);            
                TestAttribute myAtt = (TestAttribute)Attribute.GetCustomAttribute(mInfo, typeof(TestAttribute));
                myAtt.RunTest();
            }

     

 

四. 特色的选用

三. 通用规则

        //必须定义其构造函数,若是不定义有编写翻译器提供无参私下认可构造函数
        public MyselfAttribute()
        {
        }
        public MyselfAttribute(string name, int age)
        {
            _name = name;
            _age = age;
        }

正文将介绍以下内容:

五.贰 他山之石

我们大概的下结论为:定制天性attribute,本质上是贰个类,其为对象成分提供关乎附加消息,并在运作期以反射的艺术来赢得附加新闻。具体的特色实现方式,在接下去的研商中延续深切。

 

    //应用自定义性情
    //能够以Myself恐怕MyselfAttribute作为特色名
    //能够给属性Memo赋值
    [Myself(“Emma”, 25, Memo = “Emma is my good girl.”)]
    public class Mytest
    {
        public void SayHello()
        {
            Console.WriteLine(“Hello, my.net world.”);
        }
    }

• 定制特性的基本概念和用法

啥也不说了,看注释吧。

6. 结论

  1. AttributeUsage

    AttributeUsage天性用于调控什么运用自定义特性到对象成分。关于AttributeTargetsAllowMultipleInheritedValidOn,请参阅示例表明和其余文书档案。大家已经做了一对1的牵线和演示表达,我们依旧在执行中本人体会越多吧。

  2. Flags

    以Flags个性来将枚举数值看作位标识,而非单独的数值,例如: 

    enum Animal
    {
        Dog     = 0x0001,
        Cat     = 0x0002,
        Duck    = 0x0004,
      Chicken = 0x0008
    }

    故此,以降低成就相当轻易, 

    Animal animals = Animal.Dog | Animal.Cat;
    Console.WriteLine(animals.ToString());

    请估计结果是什么,答案是:”Dog,
    Cat”。假使未有Flags特别,那里的结果将是”三”。关于位标识,也将要本体系的存在延续章回中有所交代,在此只做以探求止步。

  3. DllImport

    DllImport性情,能够让大家调用非托管代码,所以大家得以应用DllImport性子引进对Win3贰API函数的调用,对于习惯了非托管代码的程序员来说,那1特征确实是救人的稻草。 

    using System;
    using System.Runtime.InteropServices;

    namespace Anytao.net
    {
        class MainClass 
        {
           [DllImport(“User32.dll”)]
           public static extern int MessageBox(int hParent, string msg, string caption, int type);

           static int Main() 
           {
              return MessageBox(0, “How to use attribute in .NET”, “Anytao_net”, 0);
          }
        }
    }

  4. Serializable

    Serializable个性申明了利用的因素得以被体系化(serializated),类别化和反体系化是另三个得以深深座谈的话题,在此大家只是提议概念,深切的讨论有待以专门的大旨来突显,限于篇幅,此不赘述。

  5. Conditional

    Conditional特性,用于规范编译,在调整时选择。注意:Conditional不可应用于数据成员和品质。

贰.1. 什么样是特色?

    public class MyProperty
    {
        //定义字段
        private string _name;
        private int _age;

 属性是面向对象编制程序的基本概念,提供了对私家字段的走访封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数码访问封装。关于属性的定义,不是本文的主要,而且相信大部分的技巧职员应该对质量有阅览众清的定义。以下是轻便的属性示例:

既然如此attribute,本质上就是二个类,那么大家就能够自定义更特定的attribute来知足性子化要求,只要遵守上述的1二条规则,完毕三个自定义性子其实是很轻巧的,典型的兑现方式为:

        public int Age
        {
            get { return _age; }
        }

四.一. 常用特色

聊起本性,由于高档语言发展的野史由来,不免令人回想另三个熟知的名字:属性。天性和性质,往往给初学者或然从C++转移到C#的人歪曲的定义冲击。那么,什么是性质,什么是特色,二者的概念和分歧,用法与示范,就要本文做以回顾性的计算和相比较,希望给您的知道带来收获。此外本文的主旨以特色的牵线为主,属性的阐述重点卓绝在两者的相比较上,关于属性的更加多论述将要另一篇主旨中详尽座谈,敬请关怀。

2. 概念引进

通过对定义的澄清和野史的追思,大家领略个性和总体性只是在名称上有过纠纷,在MSDN上关于attribute的中文表达照旧依旧属性,不过笔者同意更平凡的叫做:天性。在坚守上和行使上,二者其实未有太多模糊的定义交叉,因而也不曾供给来相比较其采纳的异同点。本文则以特色的定义为重点,来研讨其使用的场合和规则。

 

namespace Anytao.net
{
    //定制本性也足以行使在别的定制性格上,
    //应用AttributeUsage,来调整什么使用新定义的性状
    [AttributeUsageAttribute(AttributeTargets.All,       //可应用任何因素
        AllowMultiple = true,                            //允许采纳数次
        Inherited = false)]                              //不承继到派生类
    //性格也是贰个类,
    //必须几次三番自System.Attribute类,
    //命名规范为:”类名”+Attribute。        
    public class MyselfAttribute : System.Attribute
    {
        //定义字段
        private string _name;
        private int _age;
        private string _memo;

  1. 定制本性能够选择的目的成分得以为:程序集(assembly)、模块(module)、类型(type)、属性(property)、事件(event)、字段(田野)、方法(method)、参数(param)、重回值(return),应该全了。
  2. 定制天性以[,]格局显示,放在紧挨着的要素上,多个特点能够使用于同一成分,天性间以逗号隔绝,以下表明规则有效:
    [AttributeUsage][ Flags]、[AttributeUsage, Flags]、[Flags,
    AttibuteUsageAttribute]、[AttributeUsage(), FlagesAttribute()]
  3. attibute实例,是在编写翻译期举行开始化,而不是运维期。
  4. C#允许以钦定的前缀来表示性子所使用的目的成分,提议如此来处理,因为显式处理可防止去大概带来的2义性。例如:  

    using System; 

    namespace Anytao.net 
    {
        [assembly: MyAttribute(1)]          //应用于程序集
        [moduel: MyAttribute(2)]            //应用于模块
        pubic class Attribute_how2do
        {
            //
        } 
    }

     

  5. 定制天性类型,必须一直也许直接的存在延续自System.Attribute类,而且该品种必须有国有构造函数来创建其实例。

  6. 具备自定义的风味名称都应该有个Attribute后缀,那是习惯性约定。
  7. 定制天性也足以运用在任何定制本性上,这一点也很好驾驭,因为定制脾性本人也是1个类,遵循类的国有规则。例如繁多时候我们的自定义定制本性会选拔AttributeUsageAttribute个性,来调控什么行使新定义的性状。  

    [AttributeUsageAttribute(AttributeTarget.All),
    AllowMultiple = true, 
    Inherited = true]
    class MyNewAttribute: System.Attribute
    {
    //

     

  8. 定制特性不会影响使用成分的别的功效,只是约定了该因素具备的特质。

  9. 具有非抽象性情必须具有public访问限制。
  10. 特性常用于编写翻译器指令,突破#define, #undefine, #if,
    #endif的限制,而且越加灵敏。
  11. 定制本性常用来在运转期得到代码注释音讯,以附加新闻来优化调节和测试。
  12. 定制性情能够选择在某个设计方式中,如工厂格局。
  13. 定制特性还常用于位标识,非托管函数标识、方法屏弃标志等其它地点。

    public class Myrun
    {
        public static void Main(string[] args)
        {
            //怎么样以反射鲜明个性音信
            Type tp = typeof(Mytest);
            MemberInfo info = tp;
            MyselfAttribute myAttribute =
                (MyselfAttribute)Attribute.GetCustomAttribute(info, typeof(MyselfAttribute));
            if (myAttribute != null)
            {
                //嘿嘿,在运作时翻看注释内容,是否很爽
                Console.WriteLine(“Name: {0}”, myAttribute.Name);
                Console.WriteLine(“Age: {0}”, myAttribute.Age);
                Console.WriteLine(“Memo of {0} is {1}”, myAttribute.Name, myAttribute.Memo);
                myAttribute.ShowName();
            }

还有其余的要紧特色,包罗:DescriptionDefaultValueCategoryReadOnlyBrowerAble等,有时间能够深入讨论。

 

 Attribute是.NET引进的一大特色技艺,但在新浪中切磋的不是诸多,所以拿出自身的体味来分享,希望就这一技能宗旨举行1番登堂入室的教导。更加深层次的运用,例如体系化、程序安全性、设计情势多地点都得以挖掘出闪耀的黄金,那正是.NET在本事世界带来的百变魔力吗。希望大家言无不尽,来全面和补充作者在那上边的不全面和体会上的不深远,这将是笔者最大的鼓励和重力。

 

二.贰. 哪些是性质?

 

        //定义属性,达成对_age字段的包装
        //参加对字段的范围控制
        public int Age
        {
            get { return _age; }
            set
            {
                if ((value > 0) && (value < 150))
                {
                    _age = value;
                }
                else
                {
                    throw new Exception(“Not a real age”);
                }
            }
        }
    }

            MethodInfo mi = tp.GetMethod(“SayHello”);
            mi.Invoke(obj, null);
            Console.ReadLine();
        }
    }
}

    public class MyTest
    {
        public static void Main(string[] args)
        {
            MyProperty myProperty = new MyProperty();
            //触发set访问器
            myProperty.Name = “Anytao”;
            //触发get访问器
            Console.WriteLine(myProperty.Name);
            myProperty.Age = 66;
            Console.WriteLine(myProperty.Age.ToString());
            Console.ReadLine();
        }
    }

• 属性与特征的界别比较

        //定义方法
        public void ShowName()
        {
            Console.WriteLine(“Hello, {0}”, _name == null ? “world.” : _name);
        }
    }

MADN的概念为:公共语言运营时允许增加类似重大字的讲述注解,叫做attributes,
它对先后中的成分举办标注,如类型、字段、方法和天性等。Attributes和Microsoft
.NET
Framework文件的元数据保存在一道,可以用来向运维时描述您的代码,或许在程序运维的时候影响应用程序的一坐一起。

 啥也别想了,自个儿做一下探究。

• 反射的简练介绍

 

1. 引言

二.三. 组别与相比

5.1 小菜一碟

using System;
using System.Reflection;                                 //应用反射本领获得本性音讯

伍. 经文示例

            //多点反射
            object obj = Activator.CreateInstance(typeof(Mytest));

 

常用特色,也正是.NET已经提供的本来面目天性,事实上在.NET框架中早已提供了丰裕的本来性子由大家表明,以下精选出自作者认为最常用、最典型的原本天性做以简练研讨,当然这只是自个儿的一家之辞,亦不足道。笔者想询问个性,照旧从此处做为源点,从.NET提供的经文发轫,或者是一种求知的走后门,希望能给大家以启发。

自笔者驾驭的定制性格,就是为目的成分,能够是数据集、模块、类、属性、方法、甚至函数参数等投入附加音信,类似于注释,可是足以在运行期以反射的措施获得。定制特性主要利用在种类化、编写翻译器指令、设计方式等地点。

        //定义属性,完毕对_name字段的包裹
        public string Name
        {
            get { return (_name == null) ? string.Empty : _name; }
            set { _name = value; }
        }

留下评论