2013-08-02 4 views
0

Как задать пространство имен для объекта?создать пространство имен для объекта в C#

Теперь я должен использовать объект следующим образом. 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 
+0

Вы пробовали префикс имени класса с именем пространства имен как-то вроде NameSpace.ClassName tc = new NameSpace.ClassName –

+0

это класс 'MyFirstTestCase'? – Praveen

ответ

0

Ваш класс обычно находится в пространстве имен. Если вы не можете добавить одну вручную, просто обернув все это в блоке имен:

namespace Something.Here 
{ 

    public class MyClass 
    { 

    } 

} 

Таким образом, вы можете сделать:

Something.Here.MyClass my_class = new Something.Here.MyClass(); 
3

Вы не можете сделать это в C# - это не VB.

1

Невозможно. Если вы работаете над одним и тем же классом, вы можете напрямую вызвать методы так же, как и вы. Но на экземпляр объекта вы должны использовать созданную вами переменную. В VB у него есть ключевое слово WITH, которое используется для охвата части кода, но у C# этого нет.

WITH object 
    .methodA() 
    .methodB() 
END WITH 
-1

EDIT после обновления вопроса:

Итак, вы на самом деле хотите, чтобы иметь возможность вызвать метод из вашего 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 keyword и how to define static members in a class.

+0

Это не работает, как предполагалось. Мне все еще нужно написать 'testCase.DoThis();' – wewa

+0

Не думайте, что OP просят об этом, он просит C# WITH эквивалент. Ваши DoThis() и DoThat() не являются методами MyFirstTestCase, если бы им понадобился экземпляр или класс в вызове. – Adrian

+0

Это не так, как работает оператор using. Оператор using не создает другую область, единственное, что она делает, вызывает метод dispose для объекта, который вы указали после запуска кода. Устранение также не имеет никакого отношения к вопросу OP. Вы ссылаетесь на оператор с сообщением в VB – Kenneth

0

методы экземпляра должны быть доступны через экземпляр. Поэтому вы не можете этого сделать.

0

С блоками не являются частью C#, вы можете получить такую ​​же функциональность, путем цепочки методов. В основном каждый метод возвращает это.Таким образом, вы можете написать код:

tc.DoThis().DoThat(); 

, которые также могут быть написаны

tc 
.Dothis() 
.DoThat(); 
0

В чем причина, чтобы сделать это, как это? Вы устали от префикса tc. время от времени? :) Если вы продолжаете чаще называть методы класса C# в классе, это может быть признаком того, что ваши классы недостаточно структурированы.

Вы можете объединить несколько общих методов в один, который затем вызывает частные методы в классе, или ввести что-то вроде «цепочки», где обычно недействительные методы возвращают их экземпляр класса с 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.... 
; 
Смежные вопросы