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#实现注册码功能编程总结

C# 给自己写的软件,加注册码功能   为自己写的程序加一个注册功能吧。生成的机器号是根据CPU和硬盘号来的,根据自己的需求改成是否是随机生成。   代码直接粘贴到新建类覆盖原代码就能直接...

图解C# Console 输出和Console相关编程复习总结

1 基本控制台输出 首先进入 SharpDevelop ,新建一个控制台工程; SharpDevelop简介: http://blog.csdn.net/bcbobo21cn/article...

【题解】2015编程之美初赛第二场 CodeHunt C#参考与总结

昨天(2015.04.25)是浙江省赛,于是就没打编程之美初赛第一场了…… 今天下午倒是终于有空了,来来来,CodeHunt走起(不过最后还是没满分,到现在还是不知道满分搞法应该怎么弄,郁闷) ...

C#多线程编程总结

在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来。一个最直接的方法便是使用多线程。多线程编程的方式在WinForm开发中必不可...

ACCP5.0 深入.NET平台和C#编程 小总结

第1章 理解.NET Framework与C# 1.         .NET框架具有两个主要组件:公共语言运行时和框架类库。   2.     ...
  • tzjly
  • tzjly
  • 2011-08-26 23:59
  • 1141

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

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

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

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

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

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

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

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

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

自学.NET之路-C#编程之基础总结 属性,索引器,委托,事件 属性:访问修饰一般为public,首字母大写。属性内有get和set访问器,get内必须要有return,set内有valu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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