zoukankan      html  css  js  c++  java
  • 二、对象和类型(第二部分)

    类和结构体

    类和结构体实际上都是创建对象的模版,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了类的每个对象(称为实例)可以包含什么数据和功能。例如,如果一个类表示一个顾客,就可以定义字段CustomerID、FirstName、LastName和Address,以包含该顾客的信息。还可以定义处理在这些字段中存储的数据的功能。接着,就可以实例化表示某个顾客的类的对象,为这个实例设置相关字段的值,并使用其功能。

     

    结构体与类的区别:

    它们在内存中的存储方式、访问方式(类是存储在堆(heap)上的引用类型,而结构是存储在栈(stack)上的值类型)不同。结构体不支持继承。较小的数据类型使用结构可提高性能。

     

    1.数据成员

      数据成员是包含类的数据---字段、常量、事件的成员。数据成员可以是静态数据。类成员总是实例成员,除非用static进行显示的声明。

      字段时与类相关的变量。

      常量与类的关联方式和变量与类的关联方式相同。

      事件是类的成员,在发生某些行为(如改变类的字段或属性,或者进行了某种形式的用户交互操作)时,它可以让对象通知调用方。客户可以包含所谓“时间处理程序”的代码来响应该时间。

    2.函数成员

      方法

      属性

      构造函数

      终结器(析构)

      运算符

      索引器

      1.给方法传递参数

    参数可以通过引用或值传递给方法。在变量通过引用传递给方法时,被调用的方法得到的就是这个比纳凉,更准确地说,是指向内存中变量的指针。所以在方法内部对变量进行的任何改变在方法退出后仍旧有效。而如果变量通过值传递给方法,被调用的方法得到的是变量的一个相同副本,也就是说,在方法退出后,对变量进行的修改会丢失。对于复杂的数据类型,按引用传递的效率更高,因为在按值传递时,必须复制大量的数据。

    在C#中,除非特别指定,所以的引用类型都通过引用传递,所有的值类型都通过值来传递。但是,在理解引用类型的含义时需注意。因为引用类型的变量只包含对象的引用,作为参数传递的正式这个引用,而不是对象本身,所以对底层对象的修改会保留下来。相反。值类型的变量包含的是实际数据,所以传递给方法的是数据本身的副本。

     2.ref参数

    可以迫使值参数通过引用传送给方法。为此,要使用ref关键字。如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所做的任何改变都会影响原始对象的值。

     注:C#要求对传递给方法的参数进行初始化。

     3.out参数

    编译器使用out关键字来初始化。在方法的输入参数前面加上out关键字前缀,传递给该方法的变量可以不初始化。该变量通过引用传递,所以在从被调用的方法中返回时,对应方法对该变量进行的任何改变都会保留下来。在调用该方法时,还需要用到out关键字,与在定义该方法时一样。

     4.命名参数

    命名参数允许按任意顺序传递参数。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string firstName = "Dean-";
                string lastName = "McGRADY";
                string myName = MyName(firstName, lastName);
                Console.WriteLine(myName);
    
                string oneWord = "你好,";
                string twoWord = "朋友!";
    
                string words = MyName(_lastName : twoWord, _firstName : oneWord);
                Console.WriteLine(words);
    
                Console.ReadKey();
            }
    
            private static string MyName(string _firstName, string _lastName)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(_firstName);
                sb.Append(_lastName);
    
                return sb.ToString();
            }
        }
    }

    5.可选参数

    参数也是可选的。必须为可选参数提供默认值。可选参数还必须是方法定义的最后的参数。

    6.方法的重载(*)

    C#支持方法的重载------方法的几个版本有不同的签名(即:方法名相同,但参数的个数或类型不同)。为了重载方法,只需要声明同名但参数个数或类型不同的方法即可:

    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a = 1;
                int b = 9;
                int c = 10;
    
                int sub = SubMethod(a, b);
                Console.WriteLine(sub);
    
                sub = SubMethod(a, b, c);
                Console.WriteLine(sub);
    
                int age1 = 16;
                int age2 = 23;
    
                int age = AgeMethod(age1, age2);
                Console.WriteLine(age);
    
                string ageString1 = "16";
                string ageString2 = "23";
                string ageAll = AgeMethod(ageString1, ageString2);
                Console.WriteLine(ageAll);
    
                Console.ReadKey();
            }
    
            private static int SubMethod(int _oneNumber, int _twoNumber)
            {
                return _oneNumber + _twoNumber;
            }
    
            private static int SubMethod(int _oneNumber, int _twoNumber, int _threeNumber)
            {
                return _oneNumber + _twoNumber + _threeNumber;
            }
    
            private static int AgeMethod(int _oneNumber, int _twoNumber)
            {
                return _oneNumber + _twoNumber;
            }
    
            private static string AgeMethod(string _oneString, string _twoString)
            {
                int age1 = int.Parse(_oneString);
                int age2 = int.Parse(_twoString);
                return (age1 + age2).ToString();
            }
        }
    }

     

     

     

     

     

     

       

    Dean二十七
  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/Dean27/p/6030691.html
Copyright © 2011-2022 走看看