C# 是否有与Python';C语言中的恐怖#
我正在为Unity3d建立一个代码库,其中包含各种常见模式。它将作为源代码而不是编译的DLL导入到项目中 某些代码只应在存在特定依赖项(也作为源代码安装)的情况下编译。(在这种情况下,仅当项目中安装了光子时,才应编译网络代码) 我可以手动删除不需要的文件,但是我更喜欢某种自动方式来有条件地编译类 如果这是Python,我可以执行以下操作:C# 是否有与Python';C语言中的恐怖#,c#,python,C#,Python,我正在为Unity3d建立一个代码库,其中包含各种常见模式。它将作为源代码而不是编译的DLL导入到项目中 某些代码只应在存在特定依赖项(也作为源代码安装)的情况下编译。(在这种情况下,仅当项目中安装了光子时,才应编译网络代码) 我可以手动删除不需要的文件,但是我更喜欢某种自动方式来有条件地编译类 如果这是Python,我可以执行以下操作: try: import MyLibrary class MyClass(self): ... except ImportE
try:
import MyLibrary
class MyClass(self):
...
except ImportError:
# library not imported
我知道在一个类中,我可以使用反射来确定是否定义了一个类,但是有没有一种方法可以在更高的级别上实现这一点,例如使用伪代码:
#if namespace_defined('ExternalDependency') // <-- how can I do this kind of check?
using ExternalDependency;
public class MyClass { ... }
#endif
#如果在C#中定义了namespace_('ExternalDependency')/,则不可能在代码文件中包含using
子句作为项目的一部分,该项目不引用包含导入的命名空间的程序集,因此,您将无法执行该检查
如果使用的命名空间在任何引用的程序集中都找不到,则会产生编译器错误(即,是否缺少项目引用?)
换句话说,C#鼓励开发人员确保所有依赖项在编译时可用
实际上,如果您想根据某些配置、环境或其他情况在代码中执行不同的操作,那么您似乎需要坚持使用。使用
不会引用或包含代码<代码>使用
使程序员更容易键入类型名称。C#是一种类型安全的
语言。这种动态依赖关系解析只能通过反射()来完成。我知道Python的导入和C#的使用以及类型安全与动态语言之间的区别。我更好奇的是编译器是否能帮上忙!听起来可能没有。如果您将源文件转换为在生成最终代码之前分析项目依赖关系的位置,编译器在一定程度上可能会有所帮助。