C#编程总结

原创 2006年05月22日 10:56:00

以下为对C#的关键字、语法、高级应用所做的个别阐述与学习记录,当然在MSDN中都有详细的说明!

1、关键字params
主要实现:动态的可变参数
注意:params 关键字之后不允许任何其他参数
            方法声明中只允许一个 params
DEMO:

public static void UseParams(params int[] list) 
...
for ( int i = 0 ; i < list.Length ; i++ ) 
Console.WriteLine(list[i]); 
Console.WriteLine(); 
}
 

int[] myarray = new int[3...{10,11,12}
UseParams(myarray); 


输出:10  11  12

2、关键字out ref
主要实现:通俗一些就是传递out ref类型的变量给特定函数后,函数中对该变量所做的任何修改都会反应到变量上,这和C++里的引用类型所实现的一致,改变在内存空间的值,而该内存空间的地址不改变。
out:在返回多个参数时非常有用,不必初始化变量,返回之前必须为 out 参数赋值
ref:需初始化变量
当然ref 和 out可以传递数组
注意:
以下声明有效:
public void MyMethod(int i) {i = 10;}
public void MyMethod(out int i) {i = 10;}
以下声明无效:无法定义仅在 ref 和 out 方面不同的重载
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}

DEMO:
public static void TestRef(ref char i)
{
// The value of i will be changed in the calling method
i = 'b';
}

public static void TestNoRef(char i)
{
// The value of i will be unchanged in the calling method
i = 'c';
}

char i = 'a'; // variable must be initialized
TestRef(ref i); // the arg must be passed as ref
Console.WriteLine(i);
TestNoRef(i);
Console.WriteLine(i);

输出
b
b

3、==
和 Equal
==:恒等判断
Equal:恒等、比较两个引用类型是否引用同一对象,按位判断相等
主要区别:多态。运算符被重载而不是被重写,这意味着除非编译器知道调用更为具体的版本,否则它只是调用恒等版本

        // Create two equal but distinct strings
        string a = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
        string b = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
        Console.WriteLine (a==b);
        Console.WriteLine (a.Equals(b));
        // Now let's see what happens with the same tests but
        // with variables of type object
        object c = a;
        object d = b;
        Console.WriteLine (c==d);//对象的==比较
        Console.WriteLine (c.Equals(d));

True
True
False
True

 4、其他
调用委托之前,需要执行 null 测试判断

=====================================高级应用=====================================

委托、泛型、反射等高级性的概念知识一直被抬的很高、很火,也一直被广泛的应用,在Coding、实现需求的过程中,这些的确显得大有益处,既然都是概念性的东西,掌握起来其实并不难,“难”就难在我们愿不愿意花上几分钟去看看:)

第一、委托
一、基本应用
简述:当A和B同步,A需要从B的处理状态中获得命令或受B对象的控制(B是一个整体,并不属于A,B的动作可以作为A动作的一部分
域:静态、非静态、可控、安全
应用:
1、声明一个delegate对象(与传递的方法返回值应相同)       

public delegate void MyDelegate(string name);

2、创建delegate对象,将函数作为参数传入

      MyDelegate md = new MyDelegate(A);
      MyDelegate md 
= new MyDelegate(B);

3、在要实现异步调用的地方,通过上一步创建的对象来调用方法
      md("sam1111");
        // 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型

        public static void A(string name)
        
...{
                  Console.WriteLine(
"Hello, ", name);
        }

        
public static void B(string name)
        
...{
                  Console.WriteLine(
"Hello, ", name);
        }


第二、委托事件

一、
(1)定义delegate对象类型

      MyDelegate md = new MyDelegate(A);
      MyDelegate md 
= new MyDelegate(B);

 

public delegate void MyEventHandler(object sender, System.EventArgs e);

(2)
定义事件参数类,从System.EventArgs类派生。如果事件不带参数,这里可以省略
(3)定义事件处理方法,它应当与delegate对象具有相同的参数和返回值类型

                public  void MyEventFunc(object sender, System.EventArgs e)
                
...{
                           Console.WriteLine(
"My event is ok!");
                }

(4)用event关键字定义事件对象,它同时也是一个delegate对象

private event MyEventHandler myevent;

(5)用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。

this.myevent += new MyEventHandler(myecls.MyEventFunc);

(6)在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。名字是OnEventName

   protected void OnMyEvent(System.EventArgs e)
      
...{
               
if(myevent != null)
                       myevent(
this, e);
      }

(7)在适当的地方调用事件触发方法触发事件

               EventArgs e = new EventArgs();
               OnMyEvent(e);




2、泛型

3、反射

C#编程之基础总结(二)

自学.NET之路-C#编程之基础总结 属性,索引器,委托,事件 属性:访问修饰一般为public,首字母大写。属性内有get和set访问器,get内必须要有return,set内有valu...

C#面向对象编程--书本学习资料总结

1.五步程序步骤 ①初始化②输入③处理④显示⑤终止 程序的开发步骤都离不开这样的五个步骤,初始化窗口或者控件,手动输入信息或者扫描信息,要达到所期待目的的处理过程,处理过程才是重要的,对类的封装、继承...

C#编程总结(一)序列化

C#编程总结(一)序列化  序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 几种序列化技术: ...

深入理解C#:编程技巧总结(一)

深入理解C#:编程技巧总结(一) 1.实现多态性的两种方式:继承抽象类、实现接口其实就是协变的应用,通过把对象向上转型为基类或接口类型,对它调用成员,可实现多态性,即运行时调用的是对应对象的实现版本成...
  • srf4200
  • srf4200
  • 2017年01月09日 22:25
  • 116

C#编程总结(五)多线程带给我们的一些思考

C#编程总结(五)多线程带给我们的一些思考 如有不妥之处,欢迎批评指正。 1、什么时候使用多线程?      这个问题,对于系统架构师、设计者、程序员,都是首先要面对的一个问题。 ...

C# 泛型编程学习总结

C#泛型编程 http://www.cnblogs.com/kid-li/archive/2006/11/29/577045.html        泛型:通过参数化类型来实现在同一份代码上操作多...

C#高级编程----错误和异常的总结

错误和异常的总结 因为总结吗,,可能概念啥的比较多,大家要学着适应. 首先是C#中的异常用老处理系统级和用户级的错误状态,是一种结构化,统一的类型安全的处理机制. 因为鄙人开始想走C++的道路,...

C#数字证书编程总结

.NET中如何操作数字证书详解 http://blog.csdn.net/zjlovety/article/details/7252792 .NET为我们提供了操作数字证书的两个主...

深入理解C#:编程技巧总结(二)

在上一篇 深入理解C#:编程技巧总结(一) 中总结了25点,这一篇继续: 26.系列化与反系列化 使用的场合: 便于保存,把持有运行状态的对象系列化后保存到本地,在下次运行程序时,反系列化该对象来恢...
  • srf4200
  • srf4200
  • 2017年01月09日 22:29
  • 76

深入理解C#:编程技巧总结(二)

原文地址:http://www.cnblogs.com/susufufu/p/6266216.html 以下总结参阅了:MSDN文档、《C#高级编程》、《C#本质论》、前辈们的博客等资料,如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#编程总结
举报原因:
原因补充:

(最多只允许输入30个字)