大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开始讲一下面向对象的一点知识,请你们多多点评和讨论!!


1. 结构体与我们之前学的类特别的相似.
           
           2. 定义结构体的语法
              struct 结构体的名字
              {
             
          
              }

     struct Point
{
public int x;
public int y;
public Person p; public Point(int x,int y)
{
this.y = y;
this.x = x;
p = new Person();
}

3. 定义的位置:
              和类一样,定义在命名空间的下面.
           4. 结构体中可以定义字段、方法、属性、构造函数.
              结构体的使用与类一样. 也需要创建对象 然后调用对象的成员.
             Yuan y = new Yuan(12.56); Console.WriteLine(y.GetZhouChang()); Console.WriteLine(y.GetArea());   
           5. 结构体与类的区别:
              a. 从语法上的区别.
                 1).类使用class关键字声明,结构体使用struct关键字声明
                 2).可以为结构体声明字段,但是在声明字段的同时不能为其赋默认值,因为结构体可以用结构体名 变量名的方式(Direction d1;)来声明变量,这样的话就会跳过构造函数,导致字段在使用前就没有值。为什么类可以呢,其实类也不行,只是编译的时候会把赋值的执行代码写在构造函数里面去,而类只能通过new关键字来创建变量,所以一定会执行构造函数(就算没有赋值,执行构造函数也会赋默认值),所以用字段之前,一定会有值得。
                
                 3).属性与类中的属性一样,用来保护字段的,这个和类中的属性没有区别.
                 4).方法同样的表示1个功能,与类中的方法没有任何区别.
                
                 5).无参数的构造函数无论如何都会被C#编译器自动生成,所以不允许程序员为结构体写1个无参数的构造函数,并且反编译我们是看不到这个无参的构造函数的,只能new的时候在括号里面看到重载的构造函数。


                 6).要求在结构体的构造函数中,必须要为当前结构体对象的每1个字段赋值.
              b. 创建对象
                 在创建结构体对象的时候,可以像类那样使用new关键字来创建. 也可以不使用new关键字创建.
                 通过new关键字创建对象以后,这个对象的每1个字段就已经有值(默认值)了.那么我们就可以直接的使用.
                 因为通过new关键字创建对象,调用了构造函数.而在构造函数中又必须要为每1个字段赋值.
                 我们可以猜出,无参数的构造函数中做的事情: 为值类型的字段赋值0 为引用类型的字段赋值null
                
                 如果不使用new关键字来创建对象,那么这个结构体对象的字段是没有值的,要求在使用字段的值之前必须为字段赋值.
                 因为这种方式创建结构体对象没有调用构造函数,而在声明字段的时候又不允许赋值. 所以这样创建对象字段是没有值的.
                
           6. 结构体与类本质上的区别
              a. 结构体是1个值类型,类是引用类型


              b. 结构体的变量本身就是1个对象,其中不像类那样存储地址. 真正的结构体对象直接存储在这个结构体的变量中.
                 结构体对象的成员直接存在结构体变量中,
                 在声明结构体变量的时候, 其实就已经在结构体变量中创建好对象了.
                 new关键字仅仅调用构造函数.
              c. 结构体相互赋值的时候,是逐个拷贝字段的值.

     
           
           7. 什么时候使用结构体.
              a. 栈空间比较小,但是访问速度较快; 堆空间比较大,但是访问速度较慢
              b. 结构体对象是分配在栈空间中,所以结构体对象的访问速度比堆空间中的类的对象要块.
              c. 当我们要表示1个轻量级对象的时候,其中的成员较少.就可以将其声明为结构体,
                 这个时候访问速度较块.
                 重量级对象当成员比较多的时候,就声明为类,让对象分配在堆空间中.


1. 二维数组: 它表示1个表格数据. 有行有列.
                 与数组的特点一样: 所有的数据的类型相同. 存储的个数固定.
              2. 创建1个二维数组呢? 二维数组的特点在于有行有列.
                 元素的类型[,] 数组的名称 = new 元素的类型[行数,列数];

   int[, ,] arr = new int[, , ];
Console.WriteLine(arr.Length);
arr[, , ] = ;
arr[, , ] = ;

表示声明了1个指定行数,每1行有指定列数的1个表结构.
                 二维数组的元素的个数: 行数列数
                
              3. 为二维数组中的元素赋值.
                 二维数组中的元素必须通过行列两个坐标来确定.确定这个元素在第几行的第几列.
                 二维数组中的行列坐标从0开始.
                
                 在索引器中写上行坐标和列坐标就可以定位到指定的元素.
                 arr[行坐标,列坐标]=值;
                
              4. 取值:
                 仍然通过行列坐标去取值.
                 
              5. 一维数组表示1条线. 确定线上的1点只要1个坐标.
                 二维表示表示1个面. 确定面上的1点要2个坐标.
                
              6. 数组的Rank属性 可以得到数组的维度.
             
              7. 遍历:
                 Length属性代表数组中元素的个数,而 二维数组中的Length指的是行列
                 a. 使用foreach可以简单快速的遍历.
                    foreach(int item in arr)
                    {
                        cw(item);
                    }
                 b. 数组的GetLength()方法可以得到指定维度的长度.
                    传入0 可以得到行数,
                    传入1 可以得到列数
                    for(int i=0;i<arr.GetLength(0);i++)
                    {
                       for(int j =0;j<arr.GetLength(1);j++)
                       {
                            arr[i,j];
                       }
                    }

   for (int i = ; i < arr.GetLength(); i++)
{
for (int j = ; j < arr.GetLength(); j++)
{
for (int k = ; k < arr.GetLength(); k++)
{
Console.WriteLine(arr[i,j,k]);
}
}
}

8. 当我有1个表格数据的时候.
                 这些数据有行有列的存储.  我们就可以使用二维数组.
                
              9. 使用数组初始化器初始化二维数组中的每1个元素,
                 int[,] arr = { { 10, 20, 30 }, { 40, 50, 60 }, { 60, 70,80} };
            
             
             
              10.三维数组.int[, ,] arr = new int[3, 5, 4];


1. 在类中只能定义字段、属性、方法、构造函数.
                 语法上允许在定义字段的同时为字段赋值.
             
             
              2. 交错数组的本质是1个一维数组,只不过这个1维数组的元素的类型是1个数组.
                 元素的类型[][] 数组的名称 = new 元素的类型[交错数组的长度][]
                 在声明交错数组的时候,只需要指定1维数组的长度。

    int[][] arr = new int[][];
arr[] = new int[];
arr[] = new int[];
arr[] = new int[];
arr[] = new int[];

3. 赋值.
                 给交错数组的元素赋值,一定要是1个数组,因为交错数组的元素是1个数组类型的
                
                 为交错数组的元素的元素赋值
                 先通过索引器确定交错数组的元素 这个元素的类型是1个数组  再通过1个索引器确定交错数组的元素的元素  int[][] arr = { new int[] { 1, 2, 3, }, new int[] { 4, 5, 667, 8, 9 } };
                 arr[0][0]=12;
                
             
              4. 取值:
                
                
              5. 遍历.
                 使用foreach遍历,因为交错数组的元素的类型是1个数组,所以迭代变量的类型也应该是1个数组.
                 然后再遍历这个迭代变量.
                 foreach (int[] item in arr)
                 {
                    foreach(int i in item)
                    {
                        cw(i);
                    }
                 }
                 使用for循环来遍历交错数组,
                 for (int i = 0; i < arr.Length; i++)
                 {
                     arr[i]是交错数的元素,这个元素是1个数组 还得遍历这个arr[i]
                     for(int j=0;j<arr[i].Length;j++)
                     {
                         cw(arr[i][j]);
                     }
                 }

    foreach (int[] item in arr)
{
foreach (int i in item)
{
Console.Write(i+"\t");
}
Console.WriteLine();
}

6. 表示1个表格数据,行确定m,但是每1个行的列数不相同. 这个时候就可以使用交错数组.


面向对象(基础oop)之结构与数组高级的更多相关文章

  1. java 基础 04 循环结构 一维数组

    内容: (1)循环结构 (2)一维数组 1.循环结构 1.1for循环 (1)语法格式 for(初始化表达式1;条件表达式2;修改初始化表达式3){ 循环体; } (2)执行流程 执行初始化表达式 = ...

  2. JAVA(一)JAVA基础/面向对象基础/高级面向对象

    成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...

  3. python 面向对象基础和高级复习

    面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点: ...

  4. c语言学习之基础知识点介绍(十七):写入读取结构体、数组、结构体数组

    一.结构体的写入和读取 //写入结构体 FILE *fp = fopen("/Users/ios/Desktop/1.data", "w"); if (fp) ...

  5. 嵌入式-C语言基础:通过结构体指针访问结构体数组

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...

  6. Golang面向对象编程-struct(结构体)

    Golang面向对象编程-struct(结构体) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是面向对象编程 面向对象编程(Object Oriented Program ...

  7. 到头来还是逃不开Java - Java13面向对象基础

    面向对象基础 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来.所以 ...

  8. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

  9. 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符

    [重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符   1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...

随机推荐

  1. jQuery查找标签--选择器,筛选器,模态对话框, 左侧菜单栏

    查找标签 选择器: 基本选择器(同css) id选择器 $("#id") 标签选择器 $('tagName') class选择器 $(".className") ...

  2. “全栈2019”Java异常第二章:如何处理异常?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  3. 【bug】—— IE8 ajax 报错:no transport

    如题,我使用$.ajax()方法请求数据,在现代浏览器中工作正常,但在 IE 8 下,会有报错:no transport 从 stackoverflow 中获知,出现这个问题是因为** IE 8 不支 ...

  4. linux上搭建nginx+php+mysql环境详细讲解

    1.mysql安装 #安装编译环境 yum install -y gcc gcc-c++ gcc-devel g++ g++-devel; yum install -y wget yum instal ...

  5. C. Edgy Trees Codeforces Round #548 (Div. 2) 【连通块】

    一.题面 here 二.分析 这题刚开始没读懂题意,后来明白了,原来就是一个数连通块里点数的问题.首先在建图的时候,只考虑红色路径上的点.为什么呢,因为为了不走红色的快,那么我们可以反着想只走红色的路 ...

  6. 经典DP 洛谷p1880 石子合并

    https://www.luogu.org/problemnew/show/P1880 题目 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新 ...

  7. 思科 ISR路由器登录内置交换模块的方式

    ISR2900/3900系列 登录:Router#service-module gigabitethernet1/0 session 退出: control+shift+6 x disconnect ...

  8. (转)LVS安装使用详解

    原文:https://www.cnblogs.com/MacoLee/p/5856858.html 简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由 ...

  9. (转)MySql数据库4【命令行赋权操作】

    MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 原文:http://www.cnblogs.com/zhuyibo/p/3980328.html 一.g ...

  10. mssql 注入

    注入查阅 .返回的是连接的数据库名 .作用是获取连接用户名 .将数据库备份到Web目录下面 ;backup database 数据库名 to disk='c:\inetpub\wwwroot\1.db ...