.NET菜鸟试飞日记(一)

一个写了三年C的程序员转过来搞OO,写.net,其中的不适应还真是不少,想要写这样一系列博文的目的也并非是想要出书立传,而在于能给同我一样的.net新手一些弯路的提示

望高手不必来拍砖~^_^

 //***************************************************************************************************************************

第一节   由WEB开发而走进.net

  因为个人需要,工作之余需要写一个B2C的平台,因而需要学习一门能够迅速搭建起web应用的语言或者平台,于是便开始了我的.net之旅。因本人目的为构建web应用,因此,便从web应用开始写起。

我想几乎任何一个新人或者从其他领域转向web应用的人,都会很困惑,首先是对web应用程序下那一大堆的各式文件感到眼花缭乱,所以我觉得初接触一个新的平台,最先需要做的不是学习语言也并非了解平台结构,而是去了解这个平台构建应用程序的基本目录结构

 

从上图可以看出一个web应用项目主要由几大部分组成:

 1. App_Code 顾名思义,是业务代码部分

 2. App_Themes  不难看出,这里是网站的样式文件部分,*.skin/*.css 

 3. Bin 这里开始我也很费解,不过后来看了几个网站源代码以后就明白了,这里是用来引用DLL文件的

 4.Comn_Images  这里是放网站图片的,不过是主页的一些元素图片,和网站存储的数据图片无关

 5.Controls  看名字就知道是控件部分,所有使用的控件文件都在这里

 6. Prod_Images   这里是存放网站存储的item的图片,其实这里和文件夹4合并起来觉得也没有什么问题,只不过这样做增加条理性吧

 7. Global.asax global.asax:是对 asp文件中global.asa的代替,它可以使我们执行asp.net应用程序一层事件的代码,如:application_start等,使你可以在这些事件中作一些自定义的处 理;也可以定义应用程序一层的变量,如:Session等,这在整个asp.net应用程序中起作用。 

 8. web.config 如果写过java的同学也许不难想起web.xml和struts-config.xml,我个人觉得.net的web.config就好像web.xml+struts-config.xml,可以对应用程序作一些安全性的配 置,也可以对全局程序集的属性进行设置,譬如字符集的设置,譬如数据库连接字符串的定义等都可以在这里完成,具体的可以在msdn中查到

 9. XXXX.aspx 这就是整个应用程序中最光鲜的部分,页面文件了 ,页面文件下有对应的XXXX.aspx.cs是主要对页面数据更新处理事件相应等等都放在这里,可以说是操纵aspx的傀儡师

 

基本的目录结构了解完毕的话,就可以开始写第一个web应用程序了,个人觉得虽然说学习需要循序渐进,可是从开始就选择高起点未必是一件坏事,所以我选择了petshop 4.0作为学习的对象,虽然现在已经是5.0了,不过因为3.5新出了WCF,作为初学者,很多不知道的东西再加上WCF,估计会很够呛,所以找个理由让自己偷个小懒吧,先从4.0开始。

那么从开始以前,需要快速浏览一下C#的基本语法,当然如果使用C++或者VB都可以作为后台代码语言,选自己喜欢的就可以,我选了C#,因为没有接触过,尝个新鲜(虽然出来很久了,但是一直没有尝试过,BS下自己!)

 

第二节  C#语言基础

 

1. 类型

了解一种编程语言,了解类型是要第一步做好的事情,就好像使用新产品前需要读注意事项。那么随便找到一本C#书籍或者在MSDN上查阅都可以很轻易的找到相关信息,这里就不再重复了,不过需要介绍一下其中的object类型,因为有关C#的装箱和拆箱

 

   int i = 123;

object o = (object)i;  // boxing

 

         o = 123;

  i = (int)o;  // unboxing 

 装箱和取消装箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。取消装箱将从对象中提取值类型。在此示例中,整型变量 i 被“装箱”并赋值给对象 o

 

2. OO基础

既然是使用完全构建在OOD之上的一门语言,那么对OOD烂熟于心是必修课之一。什么是OO,OO是面向对象 ,这个词汇一点都不陌生,C++中也有OO,说到OO,很多同学自然想到继承 接口  多态等等一系列东西。那么C#的00和C++的OO又有什么区别呢,C#是只允许单一继承的,也就是说,C#程序里所有的类必须都是从一个基类继承而来,却可以实现多个接口。

(1)派生类和抽象类

 // compile with: /target:library

public class D

{

    public virtual void DoWork(int i)

    {

        // Original implementation.

    }

}


public abstract class E : D

{

    public abstract override void DoWork(int i);

}


public class F : E

{

    public override void DoWork(int i)

    {

        // New implementation.

    }

}

 从以上例子可以看出来,抽象类不能实例化,但是却可以被派生,使用派生类来重写抽象类继承而来的虚方法 ,而派生类也必须这么做。

(2)多态性

 在C#使用OO的多态,需要掌握的是New 和 Override关键字,以下是例子

 // Define the base class

class Car

{

    public virtual void DescribeCar()

    {

        System.Console.WriteLine("Four wheels and an engine.");

    }

}


// Define the derived classes

class ConvertibleCar : Car

{

    public new virtual void DescribeCar()

    {

        base.DescribeCar();

        System.Console.WriteLine("A roof that opens up.");

    }

}


class Minivan : Car

{

    public override void DescribeCar()

    {

        base.DescribeCar();

        System.Console.WriteLine("Carries seven people.");

    }

}

 以下是测试代码

public static void TestCars1()

{

    Car car1 = new Car();

    car1.DescribeCar();

    System.Console.WriteLine("----------");


    ConvertibleCar car2 = new ConvertibleCar();

    car2.DescribeCar();

    System.Console.WriteLine("----------");


    Minivan car3 = new Minivan();

    car3.DescribeCar();

    System.Console.WriteLine("----------");

}

 

以下是输出:

 Four wheels and an engine.

----------

Four wheels and an engine.

A roof that opens up.

----------

Four wheels and an engine.

Carries seven people.

----------

 

那么通过以上我们了解到当派生类需要一个成员来重写基类的虚方法的时候,需要用new操作符或者override操作符来声明该虚方法被重写

使用base指针来调用基类方法。 

 

(3)接口的实现

 public class SampleClass : IControl, ISurface

{

    void IControl.Paint()

    {

        System.Console.WriteLine("IControl.Paint");

    }

    void ISurface.Paint()

    {

        System.Console.WriteLine("ISurface.Paint");

    }

}

 

 3. 代理(delegate)

 是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。

// Create a method for a delegate.

public static void DelegateMethod(string message)

{

    System.Console.WriteLine(message);

}

// Instantiate the delegate.

Del handler = DelegateMethod;


// Call the delegate.

handler("Hello World");

 

4. 泛型 

 泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。.NET Framework 2.0 版类库提供一个新的命名空间 ,其中包含几个新的基于泛型的集合类。 和C ++模板用法类似

 

5.LINQ TO SQL

在 LINQ to DataSet 中,它是一个 IEnumerable<>。在 LINQ to SQL 中,它是您定义用来表示 SQL 表中数据的任何自定义对象的 IEnumerableIQueryable。 

这个最近比较热门的东西不得不提

 IEnumerable<string> highScoresQuery2 =

    from score in scores

    where score > 80

    orderby score descending

    select String.Format("The score is {0}", score); 

具体还没用过,不知道LINQ TO SQL这个用LINQ语言实现的ORM到底如何,不作评价。 

 

  先告一段落,年纪大了,熬不动了,明天继续了~好困

转载于:https://www.cnblogs.com/lezzyspace/archive/2009/12/17/1626078.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值