zoukankan      html  css  js  c++  java
  • 学习笔记静态方法调用,多肽,操作符重载,3中参数传递方式,二维数组与交错数组

    1. 静态的方法只能调用其他静态的方法, 实例可以调用静态方法, 但需要仔细设计.(静态的只能调用静态的, 实例的可以调用静态的)


    2. 方法使用动词或动词词组命名, 所有独立单词的首字母大写, 但private方法的第一个单词的字母可以小写, 也可以大写.

    3.  多肽使用原则:
       a. 要分清楚容器的类型和实例的类型: 多肽中, 容器的类型通常为基类型及接口.
       b. 容器类型和实例类型之间的关系.
          1). 同种类型容器可以控制同类型实例
          2). 上层类型容器可以隐式控制下层类型实例
          3). 同为某继承关系中的同层类型, 彼此不可以相互控制
          4). 下层类型容器不可以隐式控制上层类型容器所控制的实例. 如果上层类型容器中所控制的实例类型符合下层类型容器的规范, 则可以使用强制转换达到控制目的, 否则失败.

    4. 操作符重载: 在不改变操作符原意的情况下, 括大操作符的运算范围. 注意: 操作符的重载方法必须是在类中的静态方法, 且重载方法的参数是累的实例.

    代码
    class Person
    {
    private int _weight = 0;
    public int Weigth
    {
    get
    {
    return this._weight;
    }
    set
    {
    this._weight = value;
    }
    }

    public static int operator +(Person p1, Person P2)
    {
    return p1.Weigth + P2.Weigth;
    }
    }

    class Program
    {
    static void Main(string[] args)
    {
    Person zs
    = new Person();
    zs.Weigth
    = 100;

    Person ls
    = new Person();
    ls.Weigth
    = 150;

    int result = zs + ls;
    Console.WriteLine(result);
    }
    }

    5. 三中参数传递方式: 值传参, 引用传参(ref传参, 需要提前初始化), 输出传参(out传参, 可以提前初始化, 也可以在方法内部初始化). 严格数来: 传递参数的方式只有两种: 值传参和地址(引用)传参, 其中地址(引用)传参包含ref传参和out传参

    代码
    class Demo
    {
    static void Main(string[] args)
    {
    #region 值传参(传递值, 数据副本)
    string province = "北京";
    string avgweather = "晴转多云";
    int avgtemp = 32;
    showMsg(province, avgweather, avgtemp);
    Console.WriteLine(
    "--------------------------------------------\n");
    #endregion

    while (true)
    {
    Console.Write(
    "请输入您要查询的区县名称(输入EXIT退出): ");
    string name = Console.ReadLine().Trim();
    if (name.ToLower() == "exit")
    {
    Console.WriteLine(
    "感谢使用, 再见!");
    break;
    }
    else
    {
    #region 引用传参(传递地址)
    string weather = "尚未获取数据";//输入参数, 必须在外部先进行初始化
    int temp;//未初始化, 输出参数可以在外部进行初始化, 也可以在调用方法内部进行初始化

    Console.WriteLine(
    "\n-------------" + name + "-----------------");
    queryWeather(name,
    ref weather);//输入参数传参, ref传参
    queryTemp(name, out temp);//输出参数传参, out 传参
    showMsg(name, weather, temp);
    #endregion
    }
    }
    }

    //注意: 这里的三个方法全是void无返回值的方法
    private static void showMsg(string name, string weather, int temp)
    {
    Console.WriteLine(
    string.Format("< {0} >天晴情况为: < {1} >,平均气温为< {2} >",name,weather,temp));
    }

    private static void queryWeather(string name, ref string weather)
    {
    switch(name)
    {
    case "海淀":
    weather
    = "多云";
    break;
    case "西城":
    weather
    = "大到暴雨";
    break;
    case "朝阳":
    weather
    = "雨夹雪";
    break;
    case "崇文":
    weather
    = "雷阵雨";
    break;
    case "延庆":
    weather
    = "冰雹";
    break;
    case "昌平":
    weather
    = "大风6-7级";
    break;
    case "丰台":
    weather
    = "晴天";
    break;
    case "平谷":
    weather
    = "暴雪";
    break;
    case "顺义":
    weather
    = "多云";
    break;
    case "大兴":
    weather
    = "暴风雨敬告";
    break;
    default:
    weather
    = "不属于北京辖区, 天气未知, 建议撤离!";
    break;
    }
    }

    private static void queryTemp(string name, out int temp)
    {
    Random ran
    = new Random();
    temp
    = ran.Next(0,40);
    }
    }

    6. c#中二维数组和交错数组分配内存的方式:
    假设有二维数组定义(m,n都是整数数字) 和交错数组定义(假设交错数组的每一维度长度都是n):

    int[,] intary = new int[m,n];

    int[][] jaggedary = new int[m][];
    for(int i=0;i<m;i++)
    {
    jaggedary[i]
    = new int[n];
    }

    则:

        二维数组在内存中, 先开辟一个大小为m*n的空间(实际所占字节数为m*n*整数的4字节), 然后将该块存储空间m等分, 每一分的大小恰好为n; 也就是说二维数组是先在内存中分配完m*n的空间后, 在通过等分确定每一维度的大小, 如果输出intary.Length的话, 其值为m*n.
        而交错数组现在内存中开辟一块大小为m*4(地址或者说引用占4字节), 然后m块中的每一块存放另外一个长度为n的一维数组的引用. 当然这里只是便于表述, 这个一维数组可以使任何长度大于或小于n的数组

    因此:

         获得二维数组的维度不能使用Length属性, intary.Length实际得到的是整个二维数组所占的空间, 而应该使用intary.GetLength(0);获得第一维的长度, 即行数; 通过intary.GetLength(1)获得第二位的长度, 即列数.
          对于交错数组, 可以直接使用jaggedary.Length获得第一维的维度, 通过jaggedary[i].Length获得第二维的维度. 更多维数的数组类似.

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
  • 原文地址:https://www.cnblogs.com/cs_net/p/1828479.html
Copyright © 2011-2022 走看看