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 = ; Console.WriteLine("圆面积为:" + circle1.CArea()); Circle circle2 = new Circle(); //用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 = ; Console.WriteLine("圆面积为:" + circle1.CArea()); Circle circle2 = new Circle(); //用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();
}
}
(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#类和结构(1)的更多相关文章
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- java 深入技术七(类的结构和反射)
1.java反射(reflect) java 类的结构 java反射机制就是把java类按结构分解,每一部分对应特定的反射类 java反射机制允许运行时加载,探知和使用在编译期间完全未知的classe ...
- 【JavaScript】获取未知类的结构
目录结构: // contents structure [-] 为什么需要获取类的结构 关于JavaScript中的类 定义类的方法 第一种 第二种 DEMO HTML页面 date文件 注意事项 参 ...
- Swift3.0P1 语法指南——类和结构体
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- 【Swift学习】Swift编程之旅---类和结构体(十三)
与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...
- swift学习笔记之-类和结构体
//类和结构体 import UIKit //类和结构体 /* 1.枚举enum.结构体struct和String.Array.Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递 ...
- swift 类和结构体
1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...
- Swift面向对象基础(上)——Swift中的类和结构体(上)
学习来自<极客学院> import Foundation //1.定义类和结构体 /* [修饰符]calss 类名{ 零到多个构造器 零到多个属性 零到多个方法 零到多个下标 } 修饰符可 ...
- C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)
前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...
随机推荐
- 从DTS到驱动加载的过程分析
http://blog.csdn.net/iefswang/article/details/40543733 http://www.linuxidc.com/Linux/2013-07/86839.h ...
- multicast based on udp
1.概念 单播,是用于两个主机之间传送数据; 广播,是一个主机对局域网内的所有主机发送数据; 多播,又称为组播,它是对一组特定的主机通信. 将网络上同一类型业务逻辑上分组,只和组内的成员通信,其它主机 ...
- jquery的ajax-serialize()
jQuery ajax - serialize() 方法 jQuery Ajax 参考手册 实例 输出序列化表单值的结果: $("button").click(function() ...
- Unity3D - 使用TexturePacker打包图集以及NGUI对旋转sprites的支持
作者:EnigmaJJ 博客地址:http://www.cnblogs.com/twjcnblog/ 在Unity中使用NGUI时,为了减少draw call,我们会将美术用到的小图打成一张图集,如图 ...
- [转]sql语句优化原则
性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...
- java中获取长链接的域名
示例:长链接:https://www.baidu.com?a=1&b=2 域名:www.baidu.com static String getDomainUrl(String url) { S ...
- Redis 过期时间
http://www.redis.cn/commands/expire.html 附录: Redis 过期时间 Keys的过期时间 通常Redis keys创建时没有设置相关过期时间.他们会一直存在, ...
- 【Mac + Appium】之运行报错:[UiAutomator] UiAutomator exited unexpectedly with code 0, signal null
产生下面的原因是因为:与uiautomator2的weditor冲突,两者不能同时使用. 有时打开appium时会报错: [UiAutomator] UiAutomator exited unexpe ...
- Eclipse 首选项(Preferences)
Eclipse 首选项(Preferences) 设置首选项 该对话框可通过框架管理但是其他插件可以设置其他页面来管理首选项的配置. 我们可以通过 Window 菜单选择 Preferences 菜单 ...
- Linux命令之umask
一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读( ...