[C#基语法]之C#命名空间(namespace)

来源:互联网 发布:淘宝香水店铺推荐 知乎 编辑:程序博客网 时间:2024/06/06 12:49



  [C#基语法]苏飞传奇版   http://www.sufeinet.com/thread-3091-1-1.html

我对命名空间的一些想法

       说到这个,我相信只要有点C#基础的人都会很清楚的说,这个我知道,这个我理解。这个不就是一个命名空间吗?用Java程序员的话说就是一个包名。
      如果您真的认同以上说法那我以不幸的告诉你,你还真应该深入学习一下了。
我提几点大家看看有没有道理
1.命名空间的定义是有一个规范的。不是随便起的。 详细的等下再说
2.命名空间的导入是与添加引用息息相关的。
3.命名空间之间的类或者是对象是相对独立的。
4.命名空间是可以用别名的。


这些不知道大家知道吗?
下面我一个一个的来分析一下
1.命名空间的定义是有一个规范的。不是随便起的。 
这个名字可不是乱起的,是要有一定规范的,那有人会问乱起呢,乱起当然不会影响程序执行,但是你的程序会变的很可怕。
这里我给大家提个醒,给一些类分配命名空间时一定要让他们有相同之处才可以分在一起
2.命名空间的导入是与添加引用息息相关的
有时候我们会发现在引用一个命名空间之后是无效的,还是提示没有导入相应的命名空间,比如我们在Winform下写了这样一个方法
[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
publicstaticstringURLDecode(stringtext)
{
    returnHttpUtility.UrlDecode(text, Encoding.Default);
}
publicstaticstringURLEncode(stringtext)
{
    returnHttpUtility.UrlEncode(text, Encoding.Default);
}

生成一下
 
大家会说HttpUtility不是明明在using System.Web;下面吗?我都引用了怎么还报错。
这种情况其实很常见,原因就是我们只引用的命名空间,但并没有添加引用。
因为在Cs项目 中默认的是不加载using System.Web;这个命名空间的。
所以我们要手动的添加一个引用才可以
方法如下
 
找到这个命名空间
 
然后这时再引用一下就行了
 
这样就可以使用这两个方法了。
所以并不是Cs下的类库不能被Bs调用,而是我们没有导入命名空间的问题。这点大家一定要注意哦
3.命名空间之间的类或者是对象是相对独立
这一点我就不过多的说了,因为大家都知道在不同的名命名空间里呀类名是可以重复的。只要在引用时使用不同的命名空间名称进行区分就行了
4.命名空间是可以用别名
这一点我想以一个例子来说明
看下面代码
NameClass类
[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
 
namespaceNames
{
    /// <summary>
    /// 操作姓名的类
    /// </summary>
    publicclassNameClass
    {
        publicstringGetName()
        {
            return"苏飞";
        }
    }
}

Blogs类代码如下
[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
 
namespaceBlogs
{
    /// <summary>
    /// 博客地址操作类
    /// </summary>
    publicclassBlogClass
    {
        publicstringGetBlog()
        {
            return"http://wwww.sufeinet.com";
        }
    }
}

主程序代码如下
[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Web;
usingb = Blogs;//这种方是将命名空间起个别名,我猜这里肯定有人没使用过
usingn = Names;
 
namespaceNamespaceTest
{
    publicpartialclassForm1 : Form
    {
        publicForm1()
        {
            InitializeComponent();
        }
 
        privatevoidbutton1_Click(objectsender, EventArgs e)
        {
            n.NameClass name = newn.NameClass();
            b.BlogClass blog = newb.BlogClass();
 
            richTextBox1.Text = "我的姓名:"+ name.GetName() + "\r\n";
            richTextBox1.Text += "我的博客:"+ blog.GetBlog();
        }
    }
}

问:在命名空间中定义的元素无法显示的声明为private?

答:

命名空间内只能包含public或者internal的类定义,结构定义,接口定义等,如果没有指定,默认是internal。 protected表示存取限制于包含此定义的类或者继承类,命名空间是不可能继承的,所以protected用于命名空间内的定义是无意义的。而protected可以用于嵌套类,比如下面的代码是正确的。

namespace N1
{
    class C1
    {
        protected class C2
        {
        }
    }
}



问:生成、重新生成、清理的的关系


vs ide一个解决方案是可以加入多个项目的,如果当前解决方案只有一个项目,执行项目“生成/重新生成/清理”和解决方案“生成/重新生成/清理”是一样的,当有多个项目时选择解决方案的“生成/重新生成/清理”对解决方案下的项目都有效,如果选择了“清理”所有的项目都会被清理,要是不想全部清理就要单独选择要清理的项目进行“清理”操作,“生成/重新生成”也是一样的,不过要注意的是选择生成解决方案并不一定是工程编译想要的顺序,有库链接时可能会报错误。生成:如果工程没有编译过就全部编译,已经编译过了只对修改过的有关内容进行编译,重新生成:就是先清理一次对所有文件进行编译。清理:把编译器编译出来的文件都清理掉包括可执行文件链接库。
问:类库添加引用,using的具体操作细节
答:添加引用就是将对应的类库和项目program.cs放在一个文件夹里面。然后指向 1.放 2指向
这个才能以namespace.classA.method()的方式来访问成员函数。考虑进一步简化,此时才使用using namespace
更简洁的使用 classA.mehod()方式来访问了
问:并非所有的代码路径都有返回值
答:定义返回指定函数时,如果用到if else 或者try catch,在出现多个情况的下都要保证有return;不然就会出现以上的错误
问:动态加载dll 和引用dll的区别
答:如果说区别,就是有些时候应用程序根本不可能预先知道需要访问的DLL,所以无法引用。

  例如你写一个”快递单处理流程“软件,但是你不知道到底有几百种快递单,你可以在你的程序中写一个通用的快递单的接口(从中可以读取布局的模式信息,例如读取BitImage类型的底图,读取各个业务数据的文本框的坐标位置,等),并且写两种具体的快递单作为测试。

  可是实际使用时,另外有198种快递单,怎么办?这就需要用一个配置文件,将其它快递单”应该从哪一个名称的DLL中的什么类型(显然全都实现了你的接口)取得“信息一一列出来,这样才能让你的程序真正发挥价值。

  这种扩展设计,可能就需要动态加载DLL。

  因此这取决你是懂设计的人,还是不懂设计的人。

  没有必要动态加载DLL的时候,我们当然去动态调用它,而应该直接在工程中引用它。只有在必要的时候才动态加载DLL。
问:新建一个项目后,生成dll文件,调用的方式
答:可以添加---现有项---dll的项目文件添加,可以直接调用;另一种就是调用dll,添加-----引用---XXX.dll
问:引用正常的前提下,没有using时,如何using
答:ctrl+.
0 1
原创粉丝点击