易截截图软件、单文件、免安装、纯绿色、仅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#

C#类和C#结构体的关系

C#类:类是C# 中功能最为强大的数据类型,类也定义了数据类型的数据和行为。然后,程序员可以创建作为此类的实例的对象。
C#结构体:结构体是轻量型的类,使用开销相对于类较小。
C#类和C#结构体两者的关系:
1.数据类型:类和结构体都是数据类型,类是引用类型,结构体是值类型。
2.继承性:类可以继承和被继承,而结构体隐式继承于object,不可以继承(除接口以外)和被继承
3.构造函数:类和结构体都有默认(无参)构造函数,只不过结构体不能显示声明默认(无参)构造函数,
4.字段初始化:类可以对字段声明时赋值初始化,而结构体不可以(除const和static之外),结构体的字段必须在构造函数中进行初始化。
5.实例化:结构体实例化时可以不使用new,,如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。而类必须使用new进行实例化。
如何选择C#结构体还是C#类   
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:  
1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些  
2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有   ......

C#类和C#结构体的关系

C#类:类是C# 中功能最为强大的数据类型,类也定义了数据类型的数据和行为。然后,程序员可以创建作为此类的实例的对象。
C#结构体:结构体是轻量型的类,使用开销相对于类较小。
C#类和C#结构体两者的关系:
1.数据类型:类和结构体都是数据类型,类是引用类型,结构体是值类型。
2.继承性:类可以继承和被继承,而结构体隐式继承于object,不可以继承(除接口以外)和被继承
3.构造函数:类和结构体都有默认(无参)构造函数,只不过结构体不能显示声明默认(无参)构造函数,
4.字段初始化:类可以对字段声明时赋值初始化,而结构体不可以(除const和static之外),结构体的字段必须在构造函数中进行初始化。
5.实例化:结构体实例化时可以不使用new,,如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。而类必须使用new进行实例化。
如何选择C#结构体还是C#类   
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:  
1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些  
2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有   ......

C# DllImport的用法

大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。
DllImport所在的名字空间 using System.Runtime.InteropServices;
MSDN中对DllImportAttribute的解释是这样的:可将该属性应用于方法。DllImportAttribute 属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供包含入口点的 DLL 的名称。
DllImport 属性定义如下:
namespace System.Runtime.InteropServices
{
  [AttributeUsage(AttributeTargets.Method)]
  public class DllImportAttribute: System.Attribute
  {
   public DllImportAttribute(string dllName) {...}
   public CallingConvention CallingConvention;
   public CharSet CharSet;
   public string EntryPoint;
   public bool ExactSpelling;
   public bool PreserveSig;
   public bool SetLastError;
   public string Value { get {...} }
  }
}
  说明: ......

C# 关键字extern用法

修饰符用于声明在外部实现的方法。extern 修饰符的常见用法是在使用 Interop 服务调入非
托管代码时与 DllImport 属性一起使用;在这种情况下,该方法还必须声明为 static,如下面的示例所示:[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
注意
extern 关键字还可以定义外部程序集别名,使得可以从单个程序集中引用同一组件的不同版本。
将 abstract(C# 参考)和 extern 修饰符一起使用来修改同一成员是错误的。使用 extern 修饰符意味着方法在 C# 代码的外部实现,而使
用 abstract 修饰符意味着在类中未提供方法实现。注意
extern 关键字在使用上比在 C++ 中有更多的限制。若要与 C++ 关键字进行比较,请参见 C++ Language Reference 中的 Using extern to
Specify Linkage。
在该示例中,程序接收来自用户的字符串并将该字符串显示在消息框中。程序使用从 User32.dll 库导入的 MessageBox 方法。
using System;
using System.Runtime.InteropServices;
class MainClass
{
   [DllImport("User32.dll")]
   public static extern int MessageBox(int h, string m, string c, int type);
   s ......

C# API 大全

C:\ProgramFiles\MicrosoftVisual Studio .NET\ FrameworkSDK\Samples\ Technologies\ Interop\PlatformInvoke\ WinAPIs\CS目录下有大量的调用API的例子。
一、调用格式
using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码
//使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。
[DllImport("user32.dll")]
public static extern ReturnType FunctionName(type arg1,type arg2,...);
//调用时与调用其他方法并无区别
可以使用字段进一步说明特性,用逗号隔开,如:
[ DllImport( "kernel32", EntryPoint="GetVersionEx" )]
DllImportAttribute特性的公共字段如下:
1、CallingConvention 指示向非托管实现传递方法参数时所用的 CallingConvention 值。
CallingConvention.Cdecl : 调用方清理堆栈。它使您能够调用具有 varargs 的函数。
CallingConvention.StdCall : 被调用方清理堆栈。它是从托管代码调用非托管函数的默认约定。
2、CharSet 控制调用函数的名称版本及指示如何向方法封送 String 参数。
此字段被设置为 CharSet 值之一。如果 CharSet 字段设置为 Unicode,则所有字符串参数在传递到非托管实现 ......

C#面试笔试小贴士 1

ü   ref、out、与params
应该来说这三个关键在一般的编码过程中还是会不时涉及到的,所以不算什么“冷僻”的概念。有关三个参数修饰符的解释如下:
Ref:ref关键字让一个值类型的输入参数按引用传递。实际上,对于引用类型的参数,是否使用ref关键字,差别微乎其微。有一个例外是String类型的参数,由于C#中的String对象是不可修改的,所以要想真正达到参数引用传递的效果,需要使用ref关键字。
Out:使用out关键字表示此函数参数为输出参数。Out关键字主要应该是用于实现函数的多个返回值,使用它修饰参数的唯一好处在于变量在传递给out类型参数前,不需要初始化。
Params:params关键字指明若干输入参数将被看作一个参数数组。Params关键字只能用于参数列表的最后一个参数,这也很好理解。实际上我个人认为三个参数修饰符中,params是比较有意义同时用处较大的。
 
ü   const与readonly
大多数人会注意到const、readonly的一个区别,使用const修饰的字段是“编译时常量”,使用readonly修饰的字段是“运行时常量”(实际上来说它并非真正意义上的常量),借助以下例子可以帮助理解:
Public cons ......

C#面试笔试小贴士 2

对于多态,还必需提一个C#中的关键字:new。前面提到,对于virtual方法,JIT会确定实例的实际类型然后决定调用什么方法。但是如果派生类中new关键字修饰方法,则它向CLR澄清此派生类中的方法与基类中的方法毫无关系,以下代码最终调用是基类的introduce方法:
Code
class Program
{
    static void Main(string[] args)
     {
         Sample1.M1(new OrdinaryPeople("ZhangSan"));
         Sample1.M1(new Superman("Hancock"));
         Console.Read();
     }
}
class Sample1
{
    public static void M1(Person p)
     {
         p.Introdce();
     }
}
class Person
{
    protected string mName;
    public Person(string pName)
     {
    & ......
总记录数:642; 总页数:107; 每页6 条; 首页 上一页 [73] [74] [75] [76] 77 [78] [79] [80] [81] [82]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号