易截截图软件、单文件、免安装、纯绿色、仅160KB
热门标签: c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 最新文章 : c#

《Visual C# 最佳实践》第一章 程序设计 (一)


第一章 程序设计
  “要想成为真正的程序员,我们需要进行一场洗礼。”
  “程序 = 数据结构 + 算法。”这样的公式很精辟,它越过了表层直接描述了程序的本质。不仅如此,这样几个简单的单词也让我们明白“我们应该学习什么内容?”。人们做任何事都有一定的程序,只是没有意识到。有些人将日常行动列成表格,这就是“编写程序”。
本章的学习重点:
◆    什么是程序
◆    什么是程序设计
◆    程序设计语言
◆    数据结构
◆    算法
◆    面向过程VS面向对象
1.1程序概念
  程序并不是计算机专用品,也不是科学技术的特有产物。日常生活中,我们可以将程序看成一系列动作的执行过程的描述。
  1、买1斤胡萝卜
  2、买1斤白菜
  3、买2斤猪肉
  ……
  这,就是程序,来自生活。
  程序一词来自生活,通常指完成某些事务的一种既定方式和过程。
许多情况下,程序可形成文件,而被称为“书面程序”或“文件化程序”。程序通常包括:活动的目的和范围,做什 ......

C#数组学习

 数组概述
C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。
声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。
int[] table; // not int table[]; 
另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。
int[] numbers; // declare numbers as an int array of any size
numbers = new int[10];  // numbers is a 10-element array
numbers = new int[20];  // now it's a 20-element array
 声明数组
C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:
一维数组:
int[] numbers;
多维数组:
string[,] names;
数组的数组(交错的):
byte[][] scores;
声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(本教程稍后讨论),必须进行实例化。下面的示例展示如何创建数组:
一维数组:
int[] ......

C#中indexOf用法

IndexOf()
查找字串中指定字符或字串首次出现的位置,返首索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字",start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度
indexof参数为string,在字符串中寻找参数字符串第一次出现的位置并返回该位置。如string s="0123dfdfdf";int i=s.indexof("df");这时i==4。
......

C#中的==,!=等符号重载,以及重载等号操作

通过一个实际的例子来介绍。其中重载==,!=,Equal,GetHashCode函数。
public class Record
{
public string[] arr = null;
public bool hasEqual = false;
//重载一个下标运算符号
public string this[int index]
{
get
{
return arr[index];
}
set
{
arr[index] = value;
}
}
public override int GetHashCode()
{
// 在这里使用字符串数组的hashcode,避免自己完成一个算法
return arr.GetHashCode();
}
public Record(int count)
{
if (count < 1)
{
throw new Exception("数组的长度不能小于1");
}
arr = new string[count];
}
public static bool operator ==(Record rec1, Record rec2)
{
//注意我们调用Equals来判断是否相等。而不是在自己的函数中判、断。这是因为如果在自己的函数中判断。比如有rec2=null的情况。如果是这种情况。我们要判断if(rec2==null) {…}。其中rec2==null也是调用一个等号运算符,这里面有一个递归的过程,造成了死循环。
return Object.Equals(rec1, rec2);
}
public static bool operator !=(Record rec1, Record rec2)
{
return !Object.Equals(rec1, rec2);
}
public overrid ......

C#下实现双缓冲描画高频曲线(GDI+结合GDI)

由于项目需要,要使用c#描画高频实时曲线.
但是在C#下由于描画图像使用的是GDI+,描画效率很有问题.一旦曲线太多,就会造成CPU使用率直线上升,马上飙升到100%.
在GDI+下使用双缓冲也无济于事,双缓冲本身只会解决曲线多的时候全屏闪烁问题,但描画效率还是严重低下.
其间用过多种解决方案:DRECT3D,DRIRECT2D,GDI,,,,,等等等等
最后从效率出发,最终解决方案如下:
前台显示使用GDI,而后台描画则采用GDI+
后台采用10倍于前台窗口的BUFFER,每次向其中画一条线.然后通过一个RECT视口,每次向前台显示视口里的内容.否则每次重绘的代价太高.
这个方法实现的难点主要在于GDI和GDI+的结合部分,主要代码如下:
1.函数库:using 和 WIN32API函数
using System.Runtime.InteropServices;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
[DllImport("gdi32")]
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
[DllImport("gdi32")]
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject);
[DllImport("GDI32.dll")]
public static extern long BitBlt(IntPtr hdc ......

c# ref参数传递真面目

   c#中两种参数传递方式,ref和非ref,一些人会觉得是否采用ref传递会有更高的效率,实际呢?下面分别看下。
   1、值类型参数void FuncA(int iArg1,double dArg1,ref int iArg2,ref double dArg2)。
       iArg1和dArg1不加ref,此时的确会在栈里拷贝一份值,但同时要注意到,当添加ref修饰,编译器会创建一个指针指向iArg2和dArg2,然后把指针值拷贝入栈。对于<=指针大小的数据,实际上会造成更大的拷贝空间成本,而时间上也不能有什么提高。而对于大于指针大小的值类型。实际上由于栈的效率,这点根本不会形成问题,尤其在服务器普遍64位的情况下,即使double也只是8个字节而已。
   2、引用类型,实际编译器本身对引用的类型的参数传递已经是仅传递指针,并不会多拷贝任何东西,有什么理由说明ref会有更高效率呢?而使用ref后会创建指针的指针,反而要多一次解引用。
   还有一点,实际上ref修饰会对编译器优化造成干扰,尤其本可以使用内联的函数可能因ref而放弃内联。
   以上就性能而言,就设计而讲,ref 会造成数据被修改的危险。
   总而言之,非必要的 ......
总记录数:642; 总页数:107; 每页6 条; 首页 上一页 [16] [17] [18] [19] 20 [21] [22] [23] [24] [25]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号