日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2008-6-13
学习内容:C#中各种数据类型的使用
遗留问题:
学习总结:
值类型和引用类型:
值类型:整型,布尔型,字符型,实型,结构型,枚举行
引用类型:类,对象,字符串,数组,接口,委托
1.  值类型
示例程序:
using System;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
namespace ConsoleApplication1
{
    class Program
    {
        public struct Student
        {
            public int Class;// 班级
            public String Specialy;// 专业
        }
        enum WeekDay
        {
            Mon=1,
            Tue,
            Wen,
            Thu,
            Fri,
            Sat,
            sun
        }
        static void Main(string[] args)
        {
            // 整型
            int Num = 9;
          
            // 布尔型
            bool b = true;
            // 字符型
            String str = " 我四" ;
            Char s = '1';
            // 实数类型
            float a = 99.9f;
            // 结构类型
            Student June;
            Student Mike=new Student();
            Mike.Class = 1;
            Mike.Specialy = "MBA";
            June = Mike;
            // 枚举类型
            WeekDay tody=WeekDay.Fri;
          
            Console.WriteLine("{0}",Num);
            Console.WriteLine("{0}",b);
            Console.WriteLine("{0}",str);
            Console.WriteLine("{0}",s);
            Console.WriteLine("{0}",a);
            Console.WriteLine("June 的班级是{0},专业是{1}" ,June.Class,June.Specialy);
            Console.WriteLine(" 今天是星期{0}" ,(int)tody);
        }
    }
}
需要注意到的知识点:
例如:99.9默认的是double型,要想把它声明为float型,需在99.9结尾+上”f”或”F”
在结构类型中,他的引用方法和类的使用方法很相近,必须先new一个结构体的实例,然后再用这个事例调用结构体的方法并为其赋值,一个结构体的对象能给另外一个结构体的对象赋值
枚举类型不用new直接使用,注意类型中的第一个数据是从0号单元开始的
2.引用类型:
事例代码:
using System;
namespace ConsoleApplication2
{
    //class Main
    //{
    //    public void GetString()
    //    {
    //        Console.WriteLine(" 欢迎来到c#的世界!");
    //    }
    //}
    //class A:Main
    //{ }
    //class B:Main
    //{ }
    interface IGetString
    {
         String GetString();
    }
    class A : IGetString
    {
        public string GetString()
        {
            return" 类A" ;
        }
    }
    public class B : IGetString
    {
        public string GetString()
        {
            return " 类B" ;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            // 字符串
            string src = @"D:\ 我的文挡\program.cs" ;
            char aaa=src[1];
            Console.WriteLine("{0}",src);
            Console.WriteLine("{0}",aaa);
            // 数组
            String[] name ={ " 张三" , " 王五" };
            for (int i = 0; i < name.Length; i++)
            {
                Console.WriteLine("{0}",name[i]);
            }
            // 声明类的实例
            A a = new A();
            B b = new B();
            // 声明接口的示例ia,ib
            IGetString ia = (IGetString)a;
            IGetString ib = (IGetString)b;
            Console.WriteLine("{0}",ia.GetString());
            Console.WriteLine("{0}", ib.GetString());
           //a.GetString();
           //b.GetString();
        }
    }
}
注意接口的继承和类的继承的方法,及他们的优缺点,接口一般在扩充系统的功能和开发组件的时候使用
值类型和引用类型的区别:
类型区分为这两大类的主要原因是在于执行性能与内存资源管理的不同。由于值类型变量直接在堆栈中存储该类型的值,此类类型在内存的使用上以及访问的效能上比引用类型更好。因为引用类型变量存放的是指向实际对象的指针,因此访问对象时必须多进行一次内存引用的操作方可获得数据。且引用类型的对象必须分配多余的内存来存放虚函数指针及线程同步块,对于内存的需求较大。而使用引用类型的优点是回收站会自动替您管理分配在托管堆当中的内存。
委托实力:
using System;
namespace ConsoleApplication3
{
    class Program
    {      // 委托    
         delegate string GetSting(string nameOne,string nameTwo);
         static string mainName(string nameOne,string nameTwo)
         {
           return nameOne+" 和" +nameTwo;
         }
        static void Main(string[] args)
        {
            string a = " 张三" ;
            string b = " 王五" ;
            GetSting getName = new GetSting(mainName);
            Console.WriteLine(" 今天的同学是:{0}," ,getName(a,b));
        }
    }
}
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:
C#
public delegate int PerformCalculation(int x, int y);
与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。
委托具有以下特点:
  • 委托类似于 C++ 函数指针,但它是类型安全的。
  • 委托允许将方法作为参数进行传递。
  • 委托可用于定义回调方法。
  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。
  • 方法不需要与委托签名精确匹配。
使用委托
委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。下面的示例声明了一个名为 Del 的委托,该委托可以封装一个采用字符串作为参数并返回 void的方法。
C#
public delegate void Del(string message);
构造委托对象时,通常提供委托将包装的方法的名称或使用匿名方法。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的委托视为被包装的方法本身来调用该委托。例如:
C#
// Create a method for a delegate.
public static void DelegateMethod(string message)
{
    System.Console.WriteLine(message);
}
C#
// Instantiate the delegate.
Del handler = DelegateMethod;

// Call the delegate.
handler("Hello World");

由于实例化委托是一个对象,所以可以将其作为参数进行传递,也可以将其赋值给属性。这样,方法便可以将一个委托作为参数来接受,并且以后可以调用该委托。
何时使用委托而不使用接口
委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。既然存在这些相似性,那么类设计器何时应使用委托,何时又该使用接口呢?
在以下情况中使用委托:
  • 当使用事件设计模式时。
  • 当封装静态方法可取时。
  • 当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。
  • 需要方便的组合。
  • 当类可能需要该方法的多个实现时。
在以下情况中使用接口:
  • 当存在一组可能被调用的相关方法时。
  • 当类只需要方法的单个实现时。
  • 当使用接口的类想要将该接口强制转换为其他接口或类类型时。
  • 当正在实现的方法链接到类的类型或标识时:例如比较方法。
如何:合并委托(多路广播委托)
本示例演示如何组合多路广播委托。委托对象的一个用途在于,可以使用 + 运算符将它们分配给一个要成为多路广播委托的委托实例。组合的委托可调用组成它的那两个委托。只有相同类型的委托才可以组合。
- 运算符可用来从组合的委托移除组件委托。
示例
C#
delegate void Del(string s);

class TestClass
{
    static void Hello(string s)
    {
        System.Console.WriteLine("  Hello, {0}!", s);
    }

static void Goodbye(string s)
    {
        System.Console.WriteLine("  Goodbye, {0}!", s);
    }

static void Main()
    {
        Del a, b, c, d;

// Create the delegate object a that references
        // the method Hello:
        a = Hello;

// Create the delegate object b that references
        // the method Goodbye:
        b = Goodbye;

// The two delegates, a and b, are composed to form c:
        c = a + b;

// Remove a from the composed delegate, leaving d,
        // which calls only the method Goodbye:
        d = c - a;

System.Console.WriteLine("Invoking delegate a:");
        a("A");
        System.Console.WriteLine("Invoking delegate b:");
        b("B");
        System.Console.WriteLine("Invoking delegate c:");
        c("C");
        System.Console.WriteLine("Invoking delegate d:");
        d("D");
    }

转载于:https://blog.51cto.com/xiaoshu838/89446

看陈广老师c#参考视频总结(第八篇)相关推荐

  1. 看陈广老师c#参考视频总结(第三篇)

    日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> ...

  2. 看陈广老师c#参考视频总结(第六篇)

    日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> ...

  3. 看陈广老师c#参考视频总结(第十篇 完)

    日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> ...

  4. 看陈广老师c#参考视频总结

    http://xiaoshu838.blog.51cto.com/433568/89243 转载于:https://blog.51cto.com/1724802/592450

  5. 看陈广老师c#参考视频总结(第二篇)

    日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> ...

  6. 看陈广老师c#参考视频总结(第四篇)

    日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> ...

  7. 陈广老师C#参考视频 方法的参数传递 总结

    方法的参数传递有三种: 1.值参数 方法名称(参数类型,参数名称) 2.引用参数 方法名称(ref 参数类型,参数名称) 3.输出参数 方法名称(out  参数类型,参数名称) 运行结果: i=0 j ...

  8. 陈广老师 C#语言参考视频打包下载地址

    陈广老师 C#语言参考视频下载地址 http://dl.getdropbox.com/u/97203/chenguang.zip 转载于:https://www.cnblogs.com/ycxyyzw ...

  9. C#语言俄罗斯方块源代码(据陈广老师视频)

    以下是我根据陈广老师视频,自己敲的代码,日后会不断更新. using System; using System.Collections.Generic; using System.ComponentM ...

最新文章

  1. linux lab命令,Linux lab 命令
  2. potplayer 多个进程_操作系统进程与线程基本概念理解
  3. Android --- 当 item 的数量增加时,ListView 并不能根据所有 item 一共的数量来撑开布局
  4. linux blind函数,Linux网络编程入门
  5. 网页表格线框html,关于Dreamweaver中怎么让html网页中的table边框细线显示?
  6. 17校招真题题集(2)6-10
  7. 【Servlet】监听器技术
  8. (王道408考研数据结构)第八章排序-第四节2:快速排序
  9. L1-063 吃鱼还是吃肉 (10 分)-PAT 团体程序设计天梯赛 GPLT
  10. python编程语言-Python有望超越Java排第二?风变编程解析编程语言新趋势
  11. 【转】Sql递归查询
  12. Mac下Tomcat下载及使用
  13. python爬虫qq音乐_Python爬虫-QQ音乐无损音乐地址解析
  14. 2016年计算机网络考研真题及解析
  15. 软件安全测试都有哪些内容,如何选择软件安全测评机构
  16. div box盒子的一些概念
  17. 【数字IC前端笔试真题精刷(2022.8.14)】大疆——数字芯片开发工程师B卷
  18. 攻防世界 转轮机加密
  19. 模拟电子技术(二)基本放大电路
  20. C/C++ 用递归(分治法)解决多米诺骨牌问题

热门文章

  1. CycleGAN和Conditional GAN(cGAN)
  2. Android热修复技术选择和原理分析
  3. 爱奇艺奇遇携手京东科技,蓄势扬帆剑指XR数智化?
  4. 《Secrets》 秘密 中英互译——【one republic英文经典歌曲】
  5. SQL使用 PIVOT 和 UNPIVOT
  6. PSR 规范是干什么的?分别有哪些?底层原理是什么?
  7. Latex表格的标题左对齐、表格的一些设置
  8. 一篇文章 轻松搞懂 AC自动机
  9. 计算机固态硬盘文件夹如何添加,新手必读 手把手教你如何给SSD装Win7
  10. dcam matlab,matlab – 如何更改相机参数(自动曝光,快门速度,增益)?