标签: namespaces

'namespace'但用作'type'

这是我的程序,类使用它被称为Time2我将引用添加到TimeTest我一直得到错误'Time2'是'命名空间'但是像'类型'一样使用

有人可以告诉我这个错误是什么以及如何解决它?

namespace TimeTest
{
  class TimeTest
  {
    static void Main(string[] args)
    {
        Time2 t1 = new Time2();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

c# namespaces class

67
推荐指数
4
解决办法
13万
查看次数

我应该停止对抗Visual Studio的默认命名空间命名约定吗?

我正在开发一个MVVM项目,所以我的项目中有像Models,ViewModels,Windows等文件夹.每当我创建一个新类时,Visual Studio会自动将文件夹名称添加到命名空间名称而不是仅保留项目 - 级别命名空间 因此,向ViewModels文件夹添加一个新类将导致命名空间,MyProject.ViewModels而不仅仅是MyProject.

当我第一次遇到这个时,它让我恼火.我的类名很清楚,有时甚至包含其中的文件夹名称(例如ContactViewModel).我很快发现自己手动删除名称空间上的文件夹名称.我甚至试图创建一个自定义类模板(请参阅此问题),但我无法使其工作,因此继续手动执行.

不过,我开始怀疑,如果这个惯例存在的原因是我没有看到的.如果你出于某种原因将许多相同的类名组织成文件夹,我可以看到它很有用,但这似乎不是特别常见的情况.

问题:

  • 为什么命名空间名称的常见约定反映文件夹结构?
  • 你遵守这个惯例吗?为什么?

c# namespaces naming-conventions visual-studio

64
推荐指数
7
解决办法
2万
查看次数

使用Composer和autoload.php在PHPUnit中自动加载类

我刚刚通过Composer安装了Sebastian Bergmann的PHPUnit版本3.7.19,并编写了一个我想进行单元测试的课程.

我想让我的所有课程自动加载到每个单元测试中,不必使用includerequire在我的测试的顶部,但这证明是困难的!

这是我的目录结构的样子(尾部/斜杠表示目录,而不是文件):

  • composer.json
  • composer.lock
  • composer.phar
  • LIB /
    • returning.php
  • 测试/
    • returningTest.php
  • 供应商/
    • 斌/
      • PHPUnit的
    • 作曲家/
    • PHPUnit的/
    • symfony的/
    • autoload.php

我的composer.json文件包括以下内容:

"require": {
    "phpunit/phpunit": "3.7.*",
    "phpunit/phpunit-selenium": ">=1.2"
}
Run Code Online (Sandbox Code Playgroud)

我的returns.php类文件包括以下内容:

<?php
class Returning {
    public $var;
    function __construct(){
        $this->var = 1;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

我的returnsTest.php测试文件包括以下内容:

<?php
class ReturningTest extends PHPUnit_Framework_TestCase
{
    protected $obj = null;

    protected function setUp()
    {
        $this->obj = new Returning;
    }

    public function testExample()
    {   
        $this->assertEquals(1, $this->obj->var); …
Run Code Online (Sandbox Code Playgroud)

php phpunit namespaces autoload composer-php

63
推荐指数
4
解决办法
6万
查看次数

在函数内创建一个类并访问在包含函数范围内定义的函数

编辑:

请参阅本问题底部的完整答案.

tl;博士回答:Python有静态嵌套的范围.的静态 方面可以与隐变量声明相互作用,产生非显而易见的结果.

(这可能特别令人惊讶,因为语言通常具有动态性质).

我认为我对Python的范围规则有一个很好的处理,但是这个问题让我彻底陷入困境,而且我的google-fu让我失望了(不是我很惊讶 - 看看问题标题;)

我将从一些可以按预期工作的示例开始,但是可以自由地跳到示例4的多汁部分.

例1.

>>> x = 3
>>> class MyClass(object):
...     x = x
... 
>>> MyClass.x
3
Run Code Online (Sandbox Code Playgroud)

足够简单:在类定义期间,我们能够访问外部(在本例中为全局)范围中定义的变量.

例2.

>>> def mymethod(self):
...     return self.x
... 
>>> x = 3
>>> class MyClass(object):
...     x = x
...     mymethod = mymethod
...
>>> MyClass().mymethod()
3
Run Code Online (Sandbox Code Playgroud)

再次(忽略了为什么人们可能想要这样做),这里没有任何意外:我们可以访问外部范围中的函数.

注意:正如Frédéric在下面指出的那样,这个功能似乎不起作用.请参见示例5(及更高版本).

例3.

>>> def myfunc():
...     x = 3
...     class MyClass(object):
...         x = x
...     return MyClass
... …
Run Code Online (Sandbox Code Playgroud)

python scope namespaces

62
推荐指数
2
解决办法
5万
查看次数

在C#中使用带有默认命名空间的Xpath

我有一个带有默认命名空间的XML文档.我正在使用XPathNavigator使用Xpath选择一组节点,如下所示:

XmlElement myXML = ...;  
XPathNavigator navigator = myXML.CreateNavigator();
XPathNodeIterator result = navigator.Select("/outerelement/innerelement");
Run Code Online (Sandbox Code Playgroud)

我没有得到任何结果:我假设这是因为我没有指定命名空间.如何在我的选择中包含命名空间?

c# xml xpath namespaces xpathnavigator

61
推荐指数
8
解决办法
7万
查看次数

有没有办法让Visual Studio停止缩进命名空间?

Visual Studio不断尝试缩进命名空间内的代码.

例如:

namespace Foo
{
   void Bar();

   void Bar()
   {

   }

}
Run Code Online (Sandbox Code Playgroud)

现在,如果我手动取消缩进,那么它就会保持这种状态.但不幸的是,如果我之前添加一些东西void Bar();- 例如评论 - VS将继续尝试缩进它.

这太烦人了,基本上因为这个原因我几乎从不在C++中使用命名空间.我无法理解为什么它会尝试缩进它们(缩小整个文件的 1个甚至5个标签什么意思?),或者如何使它停止.

有没有办法阻止这种行为?一个配置选项,一个加载项,一个注册表设置,甚至是一个直接修改devenv.exe的hack.

c++ namespaces indentation visual-studio

61
推荐指数
6
解决办法
2万
查看次数

PHP如何从另一个命名空间导入所有类

我正在现有项目中实现名称空间.我发现您可以使用关键字"use"将类导入到命名空间中.我的问题是,我还可以将所有类从1个名称空间导入到另一个名称空间中.例:

namespace foo
{

    class bar
    {

        public static $a = 'foobar';

    }

}

namespace
{
    use \foo;  //This doesn't work!
    echo bar::$a;
}
Run Code Online (Sandbox Code Playgroud)

PHP 7+更新

PHP 7中的一个新功能是分组声明.这并不像在给定命名空间中对所有类使用1'use语句'那么容易,但使它更容易......

示例代码:

<?php
// Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

// PHP 7+ code
use some\namespace\{ClassA, ClassB, ClassC as C};
?>
Run Code Online (Sandbox Code Playgroud)

另见:https://secure.php.net/manual/en/migration70.new-features.php#migration70.new-features.group-use-declarations

php import namespaces

61
推荐指数
2
解决办法
4万
查看次数

大型backbone.js网络应用程序组织

我目前正在开发一个基于backbone.js构建的大型Web应用程序,并且在组织,"僵尸"等方面遇到了很多问题.所以我决定做一个主要的代码重构.我已经编写了一堆辅助函数来处理"僵尸"; 但是,我想从一开始就为代码创建一个很好的结构/组织.我没有在大型的backbone.js组织上找到很多很棒的教程/示例,所以我从头开始,想看看我是否可以就我开始的地方得到一些意见.

我显然在全局命名空间中设置了我的代码; 但我也想保持这个命名空间相当干净.我的主要app.js使类文件本身与全局命名空间分开; 您可以使用reg()函数注册一个类(以便可以实例化它),而inst()函数可以从classes数组中实例化一个类.因此,除了3种方法之外,MyApp命名空间只有路由器,模型和视图:

var MyApp = (function () {

    var classes = {
        Routers: {},
        Collections: {},
        Models: {},
        Views: {}
    };

    methods = {

        init: function () {
            MyApp.Router = MyApp.inst('Routers', 'App');
            MyApp.Model = MyApp.inst('Models', 'App');
            MyApp.View = MyApp.inst('Views', 'App');
            Backbone.history.start();
        },

        reg: function (type, name, C) {
            classes[type][name] = C;
        },

        inst: function (type, C, attrs) {
            return new classes[type][C](attrs || {});
        }

    };

    return methods;

}());

$(MyApp.init);
Run Code Online (Sandbox Code Playgroud)

在模型,集合,路由器和视图中,我像往常一样工作,但是然后需要在文件的末尾注册该类,以便可以在以后实例化它(不会使命名空间混乱):

MyApp.reg('Models', 'App', Model);
Run Code Online (Sandbox Code Playgroud)

这似乎是组织代码的不必要的方式吗?其他人是否有更好的例子来说明如何使用许多路由器,集合,模型和视图组织真正的大型项目?

javascript jquery namespaces organization backbone.js

61
推荐指数
4
解决办法
2万
查看次数

重命名名称空间后,找不到为Main方法指定的"WindowsFormsApplication1.Program"

我有一个具有默认命名空间的C#应用​​程序WindowsFormsApplication1.

我决定使用不同的命名空间,所以我重命名了WindowsFormsApplication1.现在,当我编译时,我收到错误:

找不到为Main方法指定的'WindowsFormsApplication1.Program'.

要重命名命名空间,我在文件中突出显示了命名空间,然后点击F2.

如何解决此问题并在整个项目中更改实际的命名空间?

我正在使用Visual C#2010 Express.

c# namespaces visual-studio-2010

61
推荐指数
1
解决办法
2万
查看次数

如何检查命名空间中是否存在类?

我有这个:

    use XXX\Driver\Driver;

...

var_dump(class_exists('Driver')); // false
        $driver = new Driver(); // prints 123123123 since I put an echo in the constructor of this class
        exit;
Run Code Online (Sandbox Code Playgroud)

嗯......这种行为非常不合理(创建根据PHP不存在的类的对象).有没有办法检查给定名称空间下是否存在类?

php oop namespaces

61
推荐指数
2
解决办法
7万
查看次数