Sends for the fellow dear visitors:welcome to dongpad!


 Welcome to DongPad!

 msn


<< < | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | > >> 预览模式: 普通 | 列表

Foundations of F#

This Article is Published by Live Writer。

Functional programming (FP) is the future of .NET programming, and F# is much more than just an FP language. Every professional .NET programmer needs to learn about FP, and there's no better way to do it than by learning F#--and no easier way to learn F# than from Foundations of F#.

If you're already familiar with FP, you'll find F# the language you've always dreamed of. And all .NET programmers will find F# an exciting real-world alternative to C# and Visual Basic. This book is likely to have many imitators, but few true competitors. Written by F# evangelist Rob Pickering, and tech reviewed by F#'s main designer, Don Syme, this is an elegant, comprehensive introduction to all aspects of the language and an incisive guide to using F# for real-world professional development. F# is the future of programming (not just on .NET), and the future is now.

Download by click here or here!

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 875 | 返回顶部

C# 语言和 .NET Framework 介绍

This Article is Published by Live Writer。

C# 是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在 .NET Framework 上运行的各种安全、可靠的应用程序。使用 C#,您可以创建传统的 Windows 客户端应用程序、XML Web services、分布式组件、客户端 - 服务器应用程序、数据库应用程序以及很多其他类型的程序。Microsoft Visual C# 2005 提供高级代码编辑器、方便的用户界面设计器、集成调试器和许多其他工具,以在 C# 语言版本 2.0 和 .NET Framework 的基础上加快应用程序的开发。

C# 语言

C# 语法表现力强,只有不到 90 个关键字,而且简单易学。C# 的大括号语法使任何熟悉 C、C++ 或 Java 的人都可以立即上手。了解上述任何一种语言的开发人员通常在很短的时间内就可以开始使用 C# 高效地工作。C# 语法简化了 C++ 的诸多复杂性,同时提供了很多强大的功能,例如可为空的值类型、枚举、委托、匿名方法和直接内存访问,这些都是 Java 所不具备的。C# 还支持泛型方法和类型,从而提供了更出色的类型安全和性能。C# 还提供了迭代器,允许集合类的实现者定义自定义的迭代行为,简化了客户端代码对它的使用。

作为一种面向对象的语言,C# 支持封装、继承和多态性概念。所有的变量和方法,包括 Main 方法(应用程序的入口点),都封装在类定义中。类可能直接从一个父类继承,但它可以实现任意数量的接口。重写父类中的虚方法的各种方法要求 override 关键字作为一种避免意外重定义的方式。在 C# 中,结构类似于一个轻量类;它是一种堆栈分配的类型,可以实现接口,但不支持继承。

除了这些基本的面向对象的原理,C# 还通过几种创新的语言结构加快了软件组件的开发,其中包括:

  • 封装的方法签名(称为委托),它实现了类型安全的事件通知。

  • 属性 (Property),充当私有成员变量的访问器。

  • 属性 (Attribute),提供关于运行时类型的声明性元数据。

  • 内联 XML 文档注释。

在 C# 中,如果需要与其他 Windows 软件(如 COM 对象或本机 Win32 DLL)交互,可以通过一个称为“Interop”的过程来实现。互操作使 C# 程序能够完成本机 C++ 应用程序可以完成的几乎任何任务。在直接内存访问必不可少的情况下,C# 甚至支持指针和“不安全”代码的概念。

C# 的生成过程比 C 和 C++ 简单,比 Java 更为灵活。没有单独的头文件,也不要求按照特定顺序声明方法和类型。C# 源文件可以定义任意数量的类、结构、接口和事件。

下列各项是其他 C# 资源:

.NET Framework 平台体系结构

C# 程序在 .NET Framework 上运行,它是 Windows 的一个必要组件,包括一个称为公共语言运行时 (CLR) 的虚拟执行系统和一组统一的类库。CLR 是 Microsoft 的公共语言基础结构 (CLI) 的一个商业实现。CLI 是一种国际标准,是用于创建语言和库在其中无缝协同工作的执行和开发环境的基础。

用 C# 编写的源代码被编译为一种符合 CLI 规范的中间语言 (IL)。IL 代码与资源(如位图和字符串)一起作为一种称为程序集的可执行文件存储在磁盘上,通常具有的扩展名为 .exe 或 .dll。程序集包含清单,它提供关于程序集的类型、版本、区域性和安全要求等信息。

执行 C# 程序时,程序集将加载到 CLR 中,这可能会根据清单中的信息执行不同的操作。然后,如果符合安全要求,CLR 执行实时 (JIT) 编译以将 IL 代码转换为本机机器指令。CLR 还提供与自动垃圾回收、异常处理和资源管理有关的其他服务。由 CLR 执行的代码有时称为“托管代码”,它与编译为面向特定系统的本机机器语言的“非托管代码”相对应。下图演示了 C# 源代码文件、基类库、程序集和 CLR 的编译时与运行时的关系。

从 C# 源代码到计算机执行

语言互操作性是 .NET Framework 的一个关键功能。因为由 C# 编译器生成的 IL 代码符合公共类型规范 (CTS),因此从 C# 生成的 IL 代码可以与从 Visual Basic、Visual C++、Visual J# 的 .NET 版本或者其他 20 多种符合 CTS 的语言中的任何一种生成的代码进行交互。单一程序集可能包含用不同 .NET 语言编写的多个模块,并且类型可以相互引用,就像它们是用同一种语言编写的。

除了运行时服务,.NET Framework 还包含一个由 4000 多个类组成的内容详尽的库,这些类被组织为命名空间,为从文件输入和输出到字符串操作、到 XML 分析、到 Windows 窗体控件的所有内容提供多种有用的功能。典型的 C# 应用程序使用 .NET Framework 类库广泛地处理常见的“日常”任务。

有关 .NET Framework 平台的更多信息,请参见 .NET Framework 概述

原文在这里,做学问嘛,要温故而知新!

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 753 | 返回顶部

LINQ: The Future of Data Access in C# 3.0

This Article is Published by Live Writer。

Language Integrated Query (LINQ) is Microsoft's new technology for powerful, general purpose data access. This technology provides a fully-integrated query language, available in both C# 3.0 and VB 9.0, for high-level data access against objects, relational databases, and XML documents. In this Short Cut you'll learn about LINQ and the proposed C# 3.0 extensions that support it. You'll also see how you can use LINQ and C# to accomplish a variety of tasks, from querying objects to accessing relational data and XML. Best of all, you'll be able to test the examples and run your own code using the latest LINQ CTP, available free from Microsoft. This Short Cut includes a complete reference to the standard LINQ query operators.
You can download from here!

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 926 | 返回顶部

c#的default、using和yield使用小结

This Article is Published by Live Writer。

一、default的应用场合

1、switch...case
在switch语句中,如果没有任何case表达式与开关值匹配,则控制传递给跟在可选default标签后的语句。如果没有default标签,则控制传递到switch以外。
对于c#,为了便于维护,建议default项最好要写。
示例代码:

Code

2、在泛型类和泛型方法中,在预先未知以下情况时,如何将默认值分配给参数化类型T:
(1)T是引用类型还是值类型;
(2)如果T为值类型,则它是数值还是结构。
示例代码:

public class GenericClass
    {
public static T GetDefaultT(T obj)
        {
            obj = default(T); //将默认值分配给参数化类型T
return obj;
        }
    }

备注:  给定参数化类型T的一个变量obj,只有当T为数值类型而且不是结构时,语句t = 0才能正常使用;只有当T为引用类型时,语句obj= null才有效。
使用default关键字,对于数值类型会返回零,对于引用类型会返回空,对于结构,此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型。
看下面的代码:

Code

二、using的应用场合
1、直接引入命名空间
using System.Data.SqlClient; //引入命名空间
2.using别名。using + 别名 = 包括详细命名空间信息的具体的类型。
这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。而用别名的方法会更简洁,用到哪个类就给哪个类做别名声明就可以了。
注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。
例如我们用以下语句引入using System.Data.SqlClient命名空间:
using SqlServer=using System.Data.SqlClient;
这时我们就可以用 SqlServer表示using System.Data.SqlClient命名空间,给程序书写带来方便。
3、using语句定义一个范围,在该范围内处理对象。
当年刚学asp.net那会,曾经对照着书本,吭哧吭哧动手写了很多类似下面的代码:

Code

直到遇到SqlHelper,才省了很多力气花在业务逻辑上,当年真是...,呵呵。
言归正传,什么时候适合用using呢?当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose方法。要达到这样的目的,用try...finally是可以的,但用using看起来更方便和简洁。看下面的代码:

Code

我们看到,using确实比try...finally少几行代码,不过,它们的性能怎么样呢?看两个方法各自生成的对应的IL:
(1)使用using

(2)使用try...finally

原来它们的性能几乎是一样的。上面的两段IL可以作为using和try...finally性能的参照。如果你在程序中经常try...catch或者using,对性能的影响是很明显的。
需要引起注意的是,using实例化一个对象的时候,对应的类必须实现IDisposable接口,比如我们延续上面的代码,增加一个如下方法:

static void Test()
        {
using (Program program = new Program()) //编译器报错,Program类必须要实现IDisposable接口
            {
//do something
            }
        }

正像注释写的那样,类Program必须实现IDisposable接口,写成class Program : IDisposable{...}这样就可以了。
三、yield的应用
1、迭代器块中用于向枚举数对象提供值或发出迭代结束信号。
它的形式如下:
yield return ;或者yield break;
下面看一个示例:


using System;
using System.Collections;
using System.Collections.Generic;
namespace MyCsStudy
{
///


/// 程序员,继承接口IEnumerable,实现Programer自己的迭代器
///

public class Programer : IEnumerable
    {
string[] strNameArr = new string[] { };//存程序员名
public Programer(params string[] inputNames)
        {
            strNameArr = new string[inputNames.Length];
            inputNames.CopyTo(strNameArr, 0);
        }
public  IEnumerator GetEnumerator()
        {
foreach (string s in strNameArr)
            {
yield return s; //通过yield return输出遍历程序员名称结果集
            }
        }
    }
class Program
    {
static void Main(string[] args)
        {
string[] programers = new string[] { "jeffery zhao", "dudu", "terrylee", "jeffwong" };
            Programer cnPrograms = new Programer(programers);
//下面注释部分的写法我们非常熟悉
//IEnumerator e = cnPrograms.GetEnumerator();
//while (e.MoveNext())
//{
//    Console.WriteLine(e.Current);
//}
//foreach in 和上面的注释代码实质是等价的
foreach (string s in cnPrograms)
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();
        }
    }
}

2、几个要注意的地方 
(1)、计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。
(2)、yield 语句只能出现在iterator 块中,该块可用作方法、运算符或访问器的体。
这类方法、运算符或访问器的体受以下约束的控制:
a、不允许不安全块。
b、方法、运算符或访问器的参数不能是 ref 或 out。
c、yield 语句不能出现在匿名方法中。
(3)、当和expression一起使用时,yield return语句不能出现在catch块中或含有一个或多个catch子句的 try 块中。

3、最后,为了深入理解迭代,我们有必要介绍一下.net两个和迭代关联密切的接口:IEnumerable和IEnumerator
(1)、IEnumerable和IEnumerator元数据对比
a、IEnumerator


using System;
using System.Runtime.InteropServices;
namespace System.Collections
{
// 摘要:
//     支持对非泛型集合的简单迭代。
    [ComVisible(true)]
    [Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerator
    {
// 摘要:
//     获取集合中的当前元素。
//
// 返回结果:
//     集合中的当前元素。
object Current { get; }
// 摘要:
//     将枚举数推进到集合的下一个元素。
//
// 返回结果:
//     如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
bool MoveNext();
//
// 摘要:
//     将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
void Reset();
    }
}

b、IEnumerable


using System.Runtime.InteropServices;
namespace System.Collections
{
// 摘要:
//     公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
    [ComVisible(true)]
    [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
    {
// 摘要:
//     返回一个循环访问集合的枚举数。
//
// 返回结果:
//     可用于循环访问集合的 System.Collections.IEnumerator 对象。
        [DispId(-4)]
        IEnumerator GetEnumerator();
    }
}

(2)、说明
IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current属性返回的是object类型,另外两个是实例方法;
IEnumerable: 暴露一个IEnumerator,支持在普通集合中的遍历;
IEnumerator:继承自IEnumerator,有Current属性,返回的是T类型;
IEnumerable:继承自IEnumerable,暴露一个IEnumerator,支持在泛型集合中遍历。

(3)总结
a、通过分析(1)中的源码,你也可以从这两个接口的用词选择上,看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的类是“可枚举(enumerable)”的,但并没有说明如何实现iterator;IEnumerator是一个实现式的接口,IEnumerator类就是一个iterator。
b、一个集合要支持foreach方式的遍历,必须实现IEnumerable接口(即必须以某种方式返回IEnumerator对象);
c、IEnumerator对象具体实现了iterator(通过内部的MoveNext(),Reset(),Current)。
d、IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,客户端可以通过IEnumerable的GetEnumerator()得到IEnumerator对象,所以从实质上来讲,将GetEnumerator()看作IEnumerator对象的工厂方法也未尝不可。

原文参见这里

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 1090 | 返回顶部

C#和CLR的15个细节

This Article is Published by Live Writer。

这两周一直在training,一共听了4个课程,相当的累啊。

今天先把Jeffrey Richter的培训课:C# and CLR中讲到的一些东西整理一下:

  1. foreach的性能问题

    foreach(string s in rows) { foo(s); }的实现是:

  2. IEnumerator e = rows.GetEnumerator();
    try {
    string s;
    while (e.MoveNext()) {

    查看全部...

    Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 841 | 返回顶部

IQueryable vs IEnumerable

At the most abstract level, LINQ (Language Integrated Query) can query against two types of provider: IEnumerable, which is virtually any collection type in the .NET Framework and IQueryable object such as LINQ to SQL, or Entities, or XML objects.

For the first case, you're actually leveraging the framework to do the dirty work of your filtering, projection, etc. With the second case, you're passing the burden of running the query to your provider. What happens when you make a LINQ query to an IQueryable object such as a LINQ to SQL data context, your LINQ query gets translated into the appropriate SQL syntax and gets passed off to your database to execute, once the query is iterated over.

With that in place, anyone can extend LINQ to apply to their own custom defined data stores. If you want more information on how to create your own IQueryable provider, checkout this blog series: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

But bottom line, regardless of your data source, your LINQ query syntax still remains the same.

Tags: IQueryable IEnumerable

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 1077 | 返回顶部

如何: 安装 Office 主互操作程序集

This Article is Published by Live Writer。

注: 如果不能正常运行, 请参照以下操作.
安装 Office 主互操作程序集

1. 在 "控制面板" -> "添加或删除程序" 中选择 Microsoft Office, 单击"更改".
2. 选择"添加或删除功能", 然后单击"下一步".
3. 勾选"选择应用程序的高级自定义", 然后单击"下一步".
4. 展开"Microsoft Office Excel",单击".NET 可编程性支持", 选择"从本机运行全部程序".
5. 展开"Microsoft Office Word", 单击".NET 可编程性支持", 选择"从本机运行全部程序".
6. 展开"Office 工具", 单击"Microsoft Forms 2.0 .NET 可编程性支持", 选择"从本机运行全部程序".
7. 展开"Office 工具", 展开"Microsoft Graph", 单击".NET 可编程性支持", 选择"从本机运行全部程序".
8. 按照同样的方法, 为所需的其他 Office 应用程序安装主互操作程序集.
9. 单击"更新".

更新完成后, 主互操作程序集随即安装在全局程序集缓存 (GAC) 中.

搜自:Cnblogs

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 1631 | 返回顶部

今日小计

This Article is Published by Live Writer。

在博客上添加了跟小D每日学口语的API~

Success depends on preserverance~

更多请参见:跟小D每日学口语

Tags: DongPad

分类:Life | 固定链接 |评论: 0| 引用: 0 | 查看次数: 955 | 返回顶部

发展之路

This Article is Published by Live Writer。

01. 你有丰富的工作经验、项目经验,至少需要5年以上吧。
02. 你平时做过大中型项目比较多,例如5人以上做的项目比较多,单枪匹马的不算。
03. 你有过硬的技术功底,例如你是做C#方面的,这方面的语法,用法你是很精通很精通的。
04. 你对设计模式、UML、接口、服务等等了解得很深入深入。
05. 你需要有多年的积累,不需要开发2-3年才能开发出个啥来,你手上马上就有,马上就见效。
06. 你每个月至少能给公司赚1-2万以上,就是平均你每个月能给公司创造的价值是比你的工资多很多。
07. 你需要有一定的项目管理能力、进度掌控能力、人品好,能得到大家的尊重和认可。
08. 你对B\S,C\S的项目都有比较深入的了解,对分层架构等要了解得非常深入深刻。
09. 你有强大的写文档能力,什么需求文档,设计文档,各种报告,能写得很规范合理。
10. 你有一定的售前支持能力,能给客户讲,能给销售人员讲,甚至能跟其他公司的竞争对手PK。
11. 你有比较强的沟通能力,特别是跟你的上级领导、同事、客户之间的沟通应该是没问题的。
12. 你有你的管理思想及做人原则,能得到大家的认可,别人愿意跟你一起干活。
13. 你有足够的自信及人格魅力,说白了,在公司里当中层,也不是那么容易的事情。
14. 你有一定的规划能力及成本意识,虽然公司是老板开的,但是收支至少平衡,能适当的控制部门的开支。
15. 你的价值观是是跟公司的价值观、公司的理念是吻合的,能得到其他部门的支持。
16. 你有项目预算控制能力及项目进展控制能力,遇到什么项目出了问题,能有救火的能力。
17. 公司里几乎你的技术是比较强的,虽然可能不是最强的,但是能名列前几名,否则别人是不服你的管理的。
18. 若主要是做管理类软件的,你的数据库功底要很强很强,大部分管理类软件,还是需要依靠数据库的。
19. 你在某个领域,有很深的功底,例如权限管理、工作流管理、或者是业务方面的,财务知识、进销存知识。
20. 你有成熟的大规模做项目的经验及套路,按你的做法,很容易项目得到成功。
21. 你有一股干劲,能影响大家、你能活跃整个项目的气氛,甚至是能带动整个项目组的做事风气。
22. 你家里、私人的事情不是很多,可以安心工作,一新一意能把公司的工作上的事情做好,分心过多是干不好工作的。
23. 能把握大的技术方向,项目搞得比较稳健,不是瞎折腾,劳民伤财。
24. 有非常厉害的,工作分工能力,协调配合能力,能把一个负责的工程分解成若干的细小的工作,分给合适的人干活。
25. 你有丰富的项目积累,很多开发,基本上是东复制,西复制,东改西改就可以了,儿不是一切从零开始。
26. 你有一定的人才识别能力,能用对人,用好人,否则跟你一起干活的人,都经常换,那是糟糕了。
27. 你有一定培训人才的能力,能规模生产人才,最好是1-2个月内就可以培养好需要干活的人。
28. 能把握整个部门的技术方向,能说服别人放弃那些,拿起哪些,例如我们公司不玩Java,那是瞎扯蛋总共也没几个人,只玩.NET足够了。
29. 对软件工程、CMMI体系,有比较深入的了解,能按这些理论指导思想做实际软件项目

转自CNBLOGS

Tags: DongPad

分类:Life | 固定链接 |评论: 0| 引用: 0 | 查看次数: 916 | 返回顶部

很雷很有财也很搞笑的笔试答题

在CSDN看到很有才的笔试答题哦!
闲暇之余,可以进来瞧瞧放松下心情哦!

查看全部...

Tags: DongPad

分类:Life | 固定链接 |评论: 0| 引用: 0 | 查看次数: 954 | 返回顶部
<< < | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | > >>