C#基础知识整理:C#类和结构(1)
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)的更多相关文章
- 【OGG】OGG基础知识整理
[OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
- java部分基础知识整理----百度脑图版
近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...
- JavaScript基础知识整理
只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...
- C#基础知识整理
年时,北风吹雁雪纷纷,一条秋裤冻上头.冷的连手都懒得动,就随便翻翻书,也没有更新博客,如今年已过,开始投入到正常的工作状态中,趁现在需求还没有来,把C#基础知识梳理一下,其实一直以来就想这样做的,对于 ...
- Linux基础知识整理
一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...
- wifi基础知识整理
转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...
- Oracle ASM 磁盘组基础知识整理(收藏版)
转至:https://cloud.tencent.com/developer/article/1494403 为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的 ...
随机推荐
- Handlebars.js 预编译(转)
Handlebars.js 官网上对预编译1是这样说的: 你需要安装 Node.js 你需要在全局环境中,通过 Npm 安装 handlebars 包 然后你就可以通过命令预编译你的 handleba ...
- .net core中的System.Buffers名字空间
最近研究了一下.net core 2.1的基础类库,发现它引入了一个System.Buffers名字空间,里面提供了一系列比较实用的对象,便简单的管中窥豹浏览一下. ArrayPool<T> ...
- Go内置库模块 flag
import "flag" flag包实现了命令行参数的解析.每个参数认为一条记录,根据实际进行定义,到一个set集合.每条都有各自的状态参数. 在使用flag时正常流程: 1. ...
- mysql故障
1.服务器上是的电不要随边乱断,一定要保存,然后断电,不要在服务器插座版上乱插其他电器,导致非法断电, 2.出现断电后,检查MYSQL数据库文件是否损坏,可以看WINDOWS 应用程序程序管理日志,提 ...
- php简单浏览目录内容
<?php $dir = dirname(__FILE__); $open_dir = opendir($dir); echo "<table border=1 borderCo ...
- OOP设计模式[JAVA]——04命令模式
命令模式 命令模式的意图 命令模式属于对象的行为模式.别名又叫:Action或Transaction. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求 ...
- delphi DockPresident
作为Delphi的忠实用户,我想大家对Delphi中的停靠窗体应该比较熟悉吧,是不是也希望自己编的程序也具有这样的功能?使她看起来更漂亮,更专业,更方便. 本人做的一套停靠控件DockPresiden ...
- [Winform]通过钩子监控键盘操作和鼠标移动
摘要 有这样一个需求,在程序隐藏之后,需要监控当前电脑是否有操作,如果1分钟内,无操作,则弹出视频,循环播放. 解决办法 从网上找的一个解决办法,可以通过钩子的方式实现,这里记录一下. /// < ...
- NSArray进行汉字排序
由于NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完毕按A~Z的排序,这看起来是个头疼的问题.由于牵扯到汉字转为拼音,kmyhy给出一个较易实现的方法,获取汉字的首字的首字母,如将 ...
- ASP.NET Web API中展示实体Link相关的方面
有时候,向服务端请求一个实体,我们希望返回如下的格式: links: [ href: http://localhost:8901/api/user/diaries/2013-08-17, ...