0

如何设置对象的命名空间?

现在我必须按以下方式使用对象。MyFirstTestCase tc = new MyFirstTestCase();

MyFirstTestCase tc = new MyFirstTestCase();
tc.dothis();
tc.dothat();
// ...

我想以这种方式使用对象。MyFirstTestCase tc = new MyFirstTestCase();

MyFirstTestCase tc = new MyFirstTestCase();
using tc;
dothis();
dothat();
// ...

但这不起作用。我怎样才能做到这一点?


澄清我的意思。

// MyFirstTestCase is the class
// tc is the object of MyFirstTestCase
// and instead of:
tc.dothis();
// ... I want to use:
dothis();
// dothis is a method of tc
4

8 回答 8

3

您不能在 C# 中执行此操作 - 它不是 VB。

于 2013-08-02T07:35:16.590 回答
1

不可能。如果您正在处理同一个类,则可以直接调用方法,就像您希望的那样。但是在实例化对象上,您必须使用您创建的变量。在 VB 中,它有一个 WITH 关键字,用于限定代码的一部分,但 C# 没有这个。

WITH object
   .methodA()
   .methodB()
END WITH
于 2013-08-02T07:42:48.420 回答
0

您的类通常已经在命名空间中。如果没有,您可以通过将整个内容包装在命名空间块中来手动添加:

namespace Something.Here
{

    public class MyClass
    {

    }

}

所以你可以这样做:

Something.Here.MyClass my_class = new Something.Here.MyClass();
于 2013-08-02T07:33:59.043 回答
0

实例方法需要通过实例访问。所以你不能那样做。

于 2013-08-02T07:50:42.243 回答
0

这是 VB.Net 的特性,C# 不允许这样做。但是看看这个 - http://www.codeproject.com/Tips/197548/C-equivalent-of-VB-s-With-keyword。这篇文章提出了一种简单的方法来获得几乎你想要的东西。

于 2013-08-02T07:45:29.843 回答
0

WITH 块不是 C# 的一部分,您可以通过链接方法获得类似的功能。基本上每个方法都会返回这个。所以你可以编写如下代码:

tc.DoThis().DoThat();

也可以写成

tc
.Dothis()
.DoThat();
于 2013-08-02T07:54:53.753 回答
0

这样做的原因是什么?您是否厌倦了tc.时不时地添加前缀?:) 如果您继续以这种方式更频繁地在类上调用 C# 方法,则可能表明您的类结构不合理。

您可以将几个公共方法组合成一个,然后在类中调用私有方法,或者引入类似“链接”的东西,其中通常 void 方法返回它们的类实例,this而不是:

改变这个:

public class MyFirstTestCase {
    public void MyMethod1() {
       // Does some stuff
    }
    public void MyMethod2() {
       // Does some stuff
    }
}

进入:

public class MyFirstTestCase {
    public MyFirstTestCase MyMethod1() {
       // Does some stuff
        return this;
    }
    public MyFirstTestCase MyMethod2() {
       // Does some stuff
        return this;
    }
}

你现在可以做的是:

MyFirstTestCase tc = new MyFirstTestCase();
tc
    .MyMethod1()
    .MyMethod2()
    // etc.... 
;
于 2013-08-02T07:55:26.397 回答
-1

问题更新后编辑:

那么,您实际上希望能够从您的类中调用一个方法MyFirstTestCase,但又不使用您的类的实例来限定它?

好吧,你不能那样做。

任何一个:

var testCase = new MyTestCase(); // Create an instance of the MyTestCase class
testCase.DoThis(); // DoThis is a method defined in the MyTestCase class

或者:

MyTestCase.DoThis(); // DoThis is a static method in the MyTestCase class

有关static 关键字以及如何在类中定义静态成员的信息。

于 2013-08-02T07:42:54.957 回答