• 技术文章 >后端开发 >C#.Net教程

    C#高级编程(三)-对象和类型详解

    黄舟黄舟2017-03-20 13:33:14原创639

    3.2 类和结构

      类与结构的区别是它们在内存中的存储方式访问方式(类似存储在堆上的引用类型,而结构是存储在栈上的值类型)和它们的一些特征

      语法上,类与结构非常相似,主要区别是结构使用关键字 struct 代替 class 来声明。

    3.3 类成员

      3.3.1 数据成员

        数据成员是包含类数据—字段常量事件的成员。

      3.3.2 函数成员

        函数成员提供了操作类中数据的某些功能,包括方法属性构造函数析构函数(终结器)运算符以及索引器


      1. 方法

            ref out 的区别:

            ref 在传递之前必须已经被初始化,out 则不要求。

            ref 的实质是将值类型进行引用传递,而 out 是为了增加返回值。

            命名参数:在传递参数的过程中可以指定其名字,格式为 MethodName (ParameterName : Value )

            Params 关键字 : 必须在方法参数的最后面。

            方法的重载:不能仅在返回类型上有区别,不能仅根据声明 ref out params 之间区分。


      1. 属性

            概念:属性是一个或一对方法,在客户端代码看来,它(们)是一个字段。

            get访问器不带任何参数,且返回属性声明的类型。

            set访问器带一个value参数,其类型与声明的类型相同。

            属性的访问修饰符:在get和set访问器中,必须有一个具备属性的访问级别。


      1. 构造函数

            声明构造方式就是声明一个与包含的类同名的方法,但该方法没有返回值。

            如果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数。

            (1)静态构造函数

              编写静态构造函数的原因:类中有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些字段和属性。

              .NET运行库没有确保什么时候去执行静态构造函数,所以不应该要求在某个特定时刻执行静态构造函数中的代码。但可以确保的是,它在所有引用前只会调用一次。

              无参构造函数可以与静态构造函数在同一个类中定义。

            (2)从构造函数中调用其它构造函数

              base this 关键字

       3.3.3 只读字段

        readonly const 的区别:

        readonly 可以在构造函数中赋值,而 const 哪里都不能赋值,只能初始化。

    3.4 匿名类型

        var new 关键字一起使用可以创建匿名类型,例如。

    static void Main(string[] args)
     2 
     3 
     4         {
     5 
     6 
     7             var test = new { Name = "Earl Jones", Age = 17 };
     8 
     9 
    10             Console.WriteLine(test.ToString());
    11 
    12 
    13             Console.WriteLine(test.Name.GetType().ToString());
    14 
    15 
    16             Console.WriteLine(test.Age.GetType().ToString());
    17 
    18 
    19             Console.ReadKey();
    20 
    21 
    22         }
    复制代码

        输出结果如下:

        

    php入门到就业线上直播课:进入学习

        我们并不知道这个对象的类型,编译器为其“伪造”了一个名称,但是只有编译器才能使用它,我们不能也不应该使用新对象上的任何类型反射,因为这不会得到一致的结果。

    3.5 结构

    1 MyStruct myStruct /*= new MyStruct()*/;
    2 myStruct.Name = "Earl Jones";
    3 myStruct.Age = 17;

      覆盖结构默认的构造函数会报错

        

    3.6 弱引用

      在代码中实例化一个类或结构时,只要有代码引用它,就会形成强引用。

      强引用和弱引用的区别是,强引用只要有引用就不会被GC回收,而弱引用随时都可能被GC回收,所以使用它的时候必须确定其是否存活。如:

    1     MyClass myClass;
    2 WeakReference weakMyClass = new WeakReference(new MyClass());
    3 if (weakMyClass.IsAlive)
    4 {
    5 myClass = weakMyClass.Target as MyClass;
    6 Console.WriteLine(myClass.value);
    7 }

    3.7 部分类

      Partial关键字可以允许把类、结构、方法或结构放在多个文件中。

      如果声明类似使用了下面的关键字,这些关键字就必须应用于同一个类的所有部分:

    3.9 Object类

      所有类都继承自System.Object类。

      方法:

    3.10 扩展方法

      扩展方法用于在某些不能直接修改源代码中的类中添加方法。


     1         using System; 
     2          
     3         namespace 扩展方法 
     4         { 
     5             class Program 
     6             { 
     7                 static void Main(string[] args) 
     8                 { 
     9                     MyClass myClass1 = new MyClass();
     10                     myClass1.SayHiToSomeone();
     11                     myClass1.SayHi();
     12                     Console.ReadKey();
     13                 }
     14             }
     15         
     16             class MyClass
     17             {
     18                  public void SayHi()
     19                 { 
    20             Console.WriteLine("我是最原始的方法"); 
    21             }
    22             }
    23         
    24             static class AddMyClass
    25             {
    26                 static public void SayHiToSomeone(this MyClass myClass)27                 { 
    28             Console.WriteLine("我是一个扩展方法"); 
    29             }
    30         
    31                 static public void SayHi(this MyClass myClass)
    32                 {
    33              Console.WriteLine("我是扩展方法SayHi");
    34              }
    35             }
    36         }

      输出的结果:

      

      由上得出:

    以上就是C#高级编程(三)-对象和类型详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:C#,对象,类型
    上一篇:C#高级编程(二)-核心C#的详解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中关键字有多少个• 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误• asp.net 图片验证码的HtmlHelper• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 应用绝对路径与相对路径
    1/1

    PHP中文网