c# #define什么时候用到它?

时间:2022-04-21 14:02:37
注意问题,没问#define用法(网上一搜一箩筐),我想知道什么时候会用到它?我想微软弄出这东西肯定有它的优势,真正的程序员懂我的意思,请举例,谢谢

5 个解决方案

#1


你需要条件编译结果的时候,就用了啊?!

你是问条件编译干什么用吗?你同一个文件给silverlight、wpf、winform等使用,并且还考虑Debug和Release等,有90%代码是一样的,但是有不足10%代码一定是条件编译的,例如相同类型的命名空间在不同平台上可能就不同;对于某个功能函数、某些平台可能支持10个不同的强大的重载,而其它平台可能只能支持3个,剩下的需要你自己写;可能有些平台上 Point 数据结构的属性是int,而另外的平台上是Double;你可能在Debug下要去掉“异常保护代码”,等等等等。

#2


比如说你想给A公司编译一个dll,然后给B公司编译另一个dll,所编译的硬编码源代码就是不同的(而不是全都弄一个运行时去判断的复杂、缓慢)。比如你想编译一个用GPU的dll,还想编译一个用CPU的dll,你想在发布前*切换(而不是要求调用者去运行时去判断)。等等等等。

基本上,考虑“变换源代码”代表着经验。而“不变”可能代表着你接触的产品都是刚起步。

#3


你看下人家的源代码不就知道了。
比如说,一个程序同时适配linux、windows,显然调用的底层函数不同,就可以用define为不同的编译选项适配不同的代码。

#4


条件编译嘛~
比如项目引用了一个第三方的dll,这个dll不是独立存在的,是需要主程序初始化的某个值(比如登录人帐号)
生产环境肯定是实际登录的人,张三、李四或者王五了
你在这个项目中使用,登录人肯定是木有的,防止程序报错,可以约定debug(#define Debug)的时候,登录人赋值张三,发布的时候引用dll中的登录人

这样以来,开发完全可以正常进行,发布到生产环境又不用额外的改代码

#5


不说那些高级的,至少在确定哪个代码段合适时就可用到
//#define ABC
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 条件编译
{
    class Program
    {
        static void Main(string[] args)
        {
#if ABC
            int a = 1;
#else
            int a = 2;
#endif
            Console.WriteLine(a);
        }
    }
}

#1


你需要条件编译结果的时候,就用了啊?!

你是问条件编译干什么用吗?你同一个文件给silverlight、wpf、winform等使用,并且还考虑Debug和Release等,有90%代码是一样的,但是有不足10%代码一定是条件编译的,例如相同类型的命名空间在不同平台上可能就不同;对于某个功能函数、某些平台可能支持10个不同的强大的重载,而其它平台可能只能支持3个,剩下的需要你自己写;可能有些平台上 Point 数据结构的属性是int,而另外的平台上是Double;你可能在Debug下要去掉“异常保护代码”,等等等等。

#2


比如说你想给A公司编译一个dll,然后给B公司编译另一个dll,所编译的硬编码源代码就是不同的(而不是全都弄一个运行时去判断的复杂、缓慢)。比如你想编译一个用GPU的dll,还想编译一个用CPU的dll,你想在发布前*切换(而不是要求调用者去运行时去判断)。等等等等。

基本上,考虑“变换源代码”代表着经验。而“不变”可能代表着你接触的产品都是刚起步。

#3


你看下人家的源代码不就知道了。
比如说,一个程序同时适配linux、windows,显然调用的底层函数不同,就可以用define为不同的编译选项适配不同的代码。

#4


条件编译嘛~
比如项目引用了一个第三方的dll,这个dll不是独立存在的,是需要主程序初始化的某个值(比如登录人帐号)
生产环境肯定是实际登录的人,张三、李四或者王五了
你在这个项目中使用,登录人肯定是木有的,防止程序报错,可以约定debug(#define Debug)的时候,登录人赋值张三,发布的时候引用dll中的登录人

这样以来,开发完全可以正常进行,发布到生产环境又不用额外的改代码

#5


不说那些高级的,至少在确定哪个代码段合适时就可用到
//#define ABC
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 条件编译
{
    class Program
    {
        static void Main(string[] args)
        {
#if ABC
            int a = 1;
#else
            int a = 2;
#endif
            Console.WriteLine(a);
        }
    }
}