1、结构功能特性? 实现代码?
结构用struct关键字定义的,与类类似,但有本质区别。结构实质是一个值类型,它不需要对分配的。
结构的特性:
(1)、结构作为参数传递时,是值传递。
(2)、结构的构造函数必须带参数的。
(3)、结构实例化可以不用new的。
(4)、结构不能继承,但是可以实现接口。
(5)、结构中不能初始化实例字段。
例:
 
 
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace TestStruct 

    class Program 
    { 
        public struct Circle     //定义一个圆  
        { 
            private const double pi = 3.1415926; 
 
            public double radius;  //半径  
 
            /// <summary>  
            /// 构造函数  
            /// </summary>  
            public Circle(double r) 
            { 
                radius = r; 
            } 
            /// <summary>  
            /// 面积  
            /// </summary>  
            public double CArea() 
            { 
                return 3.14 * radius * radius; 
            } 
 
        } 
 
        static void Main(string[] args) 
        { 
            Circle circle1;    //不用new实例化  
 
            circle1.radius = 5; 
 
            Console.WriteLine("圆面积为:" + circle1.CArea()); 
 
            Circle circle2 = new Circle(1);  //用new实例化  
 
            Console.WriteLine("圆面积为:" + circle2.CArea()); 
 
            Console.ReadLine(); 
        } 
    } 

using System;
using System.Collections.Generic;
using System.Text;
 
namespace TestStruct
{
    class Program
    {
        public struct Circle     //定义一个圆
        {
            private const double pi = 3.1415926;
 
            public double radius;  //半径
 
            /// <summary>
            /// 构造函数
            /// </summary>
            public Circle(double r)
            {
                radius = r;
            }
            /// <summary>
            /// 面积
            /// </summary>
            public double CArea()
            {
                return 3.14 * radius * radius;
            }
 
        }
 
        static void Main(string[] args)
        {
            Circle circle1;    //不用new实例化
 
            circle1.radius = 5;
 
            Console.WriteLine("圆面积为:" + circle1.CArea());
 
            Circle circle2 = new Circle(1);  //用new实例化
 
            Console.WriteLine("圆面积为:" + circle2.CArea());
 
            Console.ReadLine();
        }
    }
}
 
2、什么是委托? 特点? 何时使用委托而不使用接口? 如何声明、实例化和使用委托?
 
(1)、委托是一个类,它定义了方法的类型,可以讲方法当做另一个方法的参数。避免在程序中使用分支,
 
程序扩展性更好。
例子:
 
 
class Program 
  { 
      public delegate void PrinteDelegate(string name); 
 
      private static void PrinteEnglish(string name) 
      { 
          Console.WriteLine("Your Name: " + name); 
      } 
 
      private static void PrinteChinese(string name) 
      { 
          Console.WriteLine("你的大名:" + name); 
      } 
 
      private static void Printe(string name, PrinteDelegate MakeGreeting) 
      { 
          MakeGreeting(name); 
      } 
 
      static void Main(string[] args) 
      { 
          Printe("Sam Young", PrinteEnglish); 
 
          Printe("白杨树", PrinteChinese); 
 
          Console.ReadLine(); 
      } 
  } 
  class Program
    {
        public delegate void PrinteDelegate(string name);
 
        private static void PrinteEnglish(string name)
        {
            Console.WriteLine("Your Name: " + name);
        }
 
        private static void PrinteChinese(string name)
        {
            Console.WriteLine("你的大名:" + name);
        }
 
        private static void Printe(string name, PrinteDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }
 
        static void Main(string[] args)
        {
            Printe("Sam Young", PrinteEnglish);
 
            Printe("白杨树", PrinteChinese);
 
            Console.ReadLine();
        }
    } www.2cto.com
(2)、委托类似于C++ 函数指针,但它是类型安全的。
 
委托允许将方法作为参数进行传递。
 
委托可用于定义回调方法。
 
委托可以链接在一起;例如,可以对一个事件调用多个方法。
 
方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
 
C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。
 
使用委托,我觉得应该在需要分支调用不同方法时使用。但是例如工厂模式中,根据分支实例化不同的类
 
,这时就用接口。
 
 
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动
 
态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩
 
展性。
 
3、什么是部分类/分部类? 哪些功能特性? 实现代码? 适用场合? 需遵循几个规则?
分部类就是将一个类用partial关键字,分成好几个独立文件,但实质还是一个类。一般当一个类行数太多或者某些功能比较独立可以用分部类,最常见就是窗体Form.cs和Form.designer.cs。
一般需遵循如下规则:
(1)、必须使用partial 关键字
 
(2)、虽然有不同的部分,但是各个部分必须具有相同的可访问性,如public、private 等
 
(3)、如果将任意部分声明为抽象的、密封的,则整个类型都被视为抽象的、密封的
 
(4)、如果任意部分声明继承基类时,则整个类型都将继承该类
 
(5)、 各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口
 
(6)、在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用
 
(7)、嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。

C#基础知识整理:C#类和结构(1)的更多相关文章

  1. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  2. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  3. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  4. java部分基础知识整理----百度脑图版

    近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...

  5. JavaScript基础知识整理

    只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...

  6. C#基础知识整理

    年时,北风吹雁雪纷纷,一条秋裤冻上头.冷的连手都懒得动,就随便翻翻书,也没有更新博客,如今年已过,开始投入到正常的工作状态中,趁现在需求还没有来,把C#基础知识梳理一下,其实一直以来就想这样做的,对于 ...

  7. Linux基础知识整理

    一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

  8. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  9. Oracle ASM 磁盘组基础知识整理(收藏版)

    转至:https://cloud.tencent.com/developer/article/1494403 为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的 ...

随机推荐

  1. 模拟赛T1 素数

    没有链接 描述: 给p,q,求a^2+b^2 = p*q解的个数,p,q是素数 沙雕打表结论题 然后怼了3h吼爆零 题解 首先这是个结论题 然后这是证明 代码 #include <stdio.h ...

  2. BZOJ.2938.[POI2000]病毒(AC自动机)

    题目链接 \(Description\) 给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现. \(Solution\) 先建AC自动机. 假设我们有了一个无限长的安全代码, ...

  3. Git和Gitlab

    参考 http://www.cnblogs.com/clsn/p/7929958.html#auto_id_16https://backlog.com/git-tutorial/cn/intro/in ...

  4. 企点微服务网关演进之路 IT大咖说 - 大咖干货,不再错过

      http://www.itdks.com/dakashuo/new/dakalive/detail/2297

  5. 在Ubuntu的系统中怎样将应用程序加入到開始菜单中

    /*********************************************************************  * Author  : Samson  * Date   ...

  6. HTML一些标签注意事项

    最近在IE10下运行一个以前的做web系统发现了两个小问题: 一.图片上使用"alt"属性来添加一些文字提示信息在IE10下无法正常显示出来 上网查了一下原因:原来是现在一些较新的 ...

  7. 再谈vc发送键盘、组合键消息

    关于向Windows窗口发送Alt组合键的问题,这个真是经典问题啊,在网上找了一下,问的人N多,方法差不多, 但就是没有很好解决问题. 之前找到一个能正确发送的code:(Alt+A) PostMes ...

  8. C#编程(六十九)----------DLR简介

    DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印象 ...

  9. JQuery的父、子、兄弟节点查找,节点的子节点循环

    jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父元素 jQuery.children ...

  10. URAL 1837. Isenbaev&#39;s Number (map + Dijkstra || BFS)

    1837. Isenbaev's Number Time limit: 0.5 second Memory limit: 64 MB Vladislav Isenbaev is a two-time ...