结束C#2的讲解:最后的一些特性
#region 7-1演示分部类型的混合声明
partial class Example<TFirst, TSecond> : IEquatable<string> where TFirst : class//接口和类型的参数约束,如果实现基类,则必须为EventArgs
{
public bool Equals(string other)//实现IEquatable<string>
{
return false;
}
}
partial class Example<TFirst, TSecond> : EventArgs, IDisposable//指定基类和接口,不能进行参数约束
{
public void Dispose()//实现IDisposable
{
}
}
#endregion
#region 7-2分部方法在构造函数中被调用
partial class PartialMethodDemo
{
public PartialMethodDemo()
{
OnConstructorStart();
Console.WriteLine("Generated constructor");
OnConstructorEnd();
}
partial void OnConstructorStart();//方法没有实现,将被移除,IL中不存在
partial void OnConstructorEnd();//分部方法和抽象方法相同:只使用partial修饰符提供签名无需实现
}
partial class PartialMethodDemo
{
partial void OnConstructorEnd()//实际实现需要partial,返回类型必须是void,不能获取out参数,它们是私有的
{
Console.WriteLine("Manual code");
}
}
#endregion
- 所有成员都是静态的(除了使用构造函数)
- 类直接从object派生
- 一般情况下不应该有状态,除非涉及高速缓存或单例
- 不能存在任何构造函数
- 类可以是密封的
C#1的工具类
#region 7-3典型的C#1工具类
public sealed class NonStaticStringHelper//密封类防止派生
{
private NonStaticStringHelper()//提供一个私有的构造函数,防止其他代码对其进行实例化
{ }
public static string Reverse(string input)//所有方法都是静态的
{
char[] chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
}
#endregion
#region 7-4将代码7-3中的工具类转化为一个C#2的静态类
public static class StringHelper
{
public static string Reverse(string input)
{
char[] chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
}
#endregion
- 类不能声明为abstract或sealed
- 类不能设定任何要实现的接口
- 类不能设定基类
- 类不能包含任何非静态成员,包括构造函数
- 类不能包含任何操作符
- 类不能包含任何protected或protected internal成员
独立的取值方法/赋值方法属性访问器
using WinForms = System.Windows.Forms;
namespace 第七章结束Csheep2的讲解最后一些特性窗体
{
class WinForms { };//名字同为WinForms
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Type s2 = typeof(WinForms::Button);//使用::告知编译器WinForms仍然做别名使用
}
}
}
class Configuration { }
namespace 第七章结束Csheep2的讲解最后一些特性
{
class Program
{
class Configuration { }
static void Main(string[] args)
{
#region 7-7使用全局命名空间别名来准确的设定想要的类型
Console.WriteLine(typeof(Configuration));//打印:第七章结束Csheep2的讲解最后一些特性.Program+Configuration 移动命名空间之前就把Configuration解析为这个类型
Console.WriteLine(typeof(global::Configuration));//打印:Configuration
Console.WriteLine(typeof(global::第七章结束Csheep2的讲解最后一些特性.Program));
#endregion
Console.ReadKey();
}
}
#region 7-9包含了未用字段的类
public class FieldUsedOnlyByflection
{
#region 7-10禁用和恢复警告
#pragma warning disable 0169 //禁用警告
int x;
#pragma warning restore 0169//恢复警告
#endregion
}
#endregion
[assembly: InternalsVisibleTo("FriendAssembly")]//只能用于程序集,授予FriendAssembly额外的访问权限
namespace Source
{
#region 7-12友元程序集的演示
public class Source1
{
internal static void InternalMethod()//在FriendAssembly可被访问
{
Console.WriteLine("InternalMethod()");
}
public static void PublicMethod()
{
Console.WriteLine("PublicMethod()");
}
}
#endregion
}
namespace FriendAssembly
{
public class Class1
{
public void test()
{
Source1.PublicMethod();
Source1.InternalMethod();
}
}
}
结束C#2的讲解:最后的一些特性的更多相关文章
- ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas
? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...
- C#复习笔记(3)--C#2:解决C#1的问题(结束C#2的内容:最后一些特性)
结束C#2的内容:最后一些新性 这是本章要讲的内容: 分部类型:可以在多个源文件中为 一个类型编写代码. 特别适用于部分代码是自动生成, 而其他部分的代码为手写的类型. 静态类:对工具类进行整理, 以 ...
- java基础讲解10-----类的高级特性
一.final关键字 1.final关键字修饰变量,表示变量不可以被改变,如果想修改,编译器不会接受的. 注意:final关键字定义的变量必须赋值 public static final 修饰 白 ...
- 淘系工程师讲解的使用Spring特性优雅书写业务代码
使用Spring特性优雅书写业务代码 大家在日常业务开发工作中相信多多少少遇到过下面这样的几个场景: 当某一个特定事件或动作发生以后,需要执行很多联动动作,如果串行去执行的话太耗时,如果引入消息中 ...
- Javascript 俄罗斯方块 游戏代码解释!
俄罗斯方块代码说明 /** 名称:Javascript 俄罗斯方块! 作者:Gloot 邮箱:glootz@gmail.com QQ:345268267 网站:http://www.cnblogs.c ...
- 深入理解c#(第三版)(文摘)
第一部分 基础知识 第1章 C#开发的进化史 1.3 1.3.1 表示未知的价格 public decimal? Price { get; private set; } new ProductWith ...
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...
- SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)
前言 接下来我们将SQL Server基础系列还剩下最后几节内容结束,后续再来讲解SQL Server性能调优,我们开始进入主题. SQL Server事务对本地变量影响 事务对变量影响具体是指什么意 ...
- Vue深度学习(5)-过渡效果
简介 通过 Vue.js 的过渡系统,你可以轻松的为 DOM 节点被插入/移除的过程添加过渡动画效果.Vue 将会在适当的时机添加/移除 CSS 类名来触发 CSS3 过渡/动画效果,你也可以提供相应 ...
随机推荐
- (转载)一个生动的NIO描述
原文地址:http://blog.csdn.net/zhouhl_cn/article/details/6568119 传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大 ...
- 联想A7600-m刷机心得
先来说说刷机 联想A7600-m的刷机
- waypoints
http://imakewebthings.com/waypoints waypoints 滑冰122分钟 Cygwin http:/nxutils.sourceforge.net http://ba ...
- 使用Yeoman generator来规范工程的初始化
前言 随着开发团队不断发展壮大,在人员增加的同时也带来了协作成本的增加:业务项目越来越多,类型也各不相同.常见的类型有基础组件.业务组件.基于React的业务项目.基于Vue的业务项目等等.如果想要对 ...
- cephfs创建及挂载
Ceph 文件系统( Ceph FS )是个 POSIX 兼容的文件系统,它使用 Ceph 存储集群来存储数据.Ceph 文件系统要求 Ceph 存储集群内至少有一个 Ceph 元数据服务器. 1.添 ...
- js求三位数的和
例如输入508就输出5+0+8的和13: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- C++ Primer 5 CH7 类
7.1 定义抽象数据类型 定义和声明成员函数的方式与普通函数差不多,成员函数的声明必须在类的内部,定义可以在类的内部或外部.作为接口组成部分的非成员函数的声明和定义都在类的外部. 定义在类内部的函数是 ...
- centos下编译phantomjs2.0
phantomjs是一个无头浏览器,可以用来做测试和爬虫,但是因为有一些问题没有解决,所以官网不提供2.0版本的binary包,所以要自己编译. 1.安装需要的依赖: sudo yum -y inst ...
- (iOS)关于@property和@synthesize的理解(原创)
开始学习ios的时候,就对一些objc的语法不理解,就比如@property和@synthesize,之前都是记住然后照着用,但是写的代码多了,对objc和ios有了一些理解,再加上最近用MRC,所以 ...
- Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!
跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装+系统软件卸载:http://www.cnblogs.com/du ...