2012-05-20 3 views
1

Я новичок в C# .Net. в моем решении два пространства имен не могут видеть друг друга.одно пространство имен не может найти класс в другом пространстве имен

У меня есть проект A, который имеет частичный класс c1 и некоторые методы в нем. Проект B с другим пространством имен также имеет частичный класс c1, некоторые методы с тем же именем которого в проекте A и некоторые другие методы.

Я добавил ссылку в проект A, ссылающуюся на проект B, используя пространство имен B, включенных в классы классов A.

Но все же в A я не могу использовать то, что находится в классе c1 от B, я могу видеть только метод класса c1 от самого A. Я хочу использовать методы c1 из обоих проектов в A.

Может ли кто-нибудь помочь мне с этим, пожалуйста? Я использую .Net framework 4

+0

поэтому я сделал два проекта одинаковыми пространствами имен, изменив свойства и часть пространства имен в своих классах. они по-прежнему представляют собой два разных проекта только с тем же пространством имен. будет ли это работать? я просто хочу использовать какой-либо метод c1 из B в проекте A, где этот метод c1 также определен в A с некоторыми перекрытиями. – neverland

ответ

1

B, по-видимому, является полным классом в другом пространстве имен, но определен только как частичный класс в конкретном файле. Вы не можете, как упоминает @tzerb, иметь два одинаковых частичных класса в двух разных пространствах имен - в силу того, что пространства имен разные, сами имена классов (полностью квалифицированные) различны.

Если все, что вам нужно использовать методы из класса B в классе А (и, возможно, переопределить их), вы можете использовать либо наследование:

class A: B 
{ 
    // override methods from B 
    // or call base.<method> when needed 
} 

Или защитная оболочка:

class A 
{ 
    private B _b; 

    // construct and use _b methods directly 
} 

Использование наследование, если A-B, используйте защитную оболочку иначе.

+0

Это все еще разные проекты. Чтобы проект A ссылался на что-то из проекта B, он должен * компилировать * B и включить его в A. После того, как вы скомпилировали класс, вы больше не можете использовать его в определении «частичного» - теперь вы можете содержать или наследовать это, согласно моему ответу. – yamen

+0

Спасибо yamen, вещи A и B - это два проекта со многими классами и одним и тем же пространством имен. В проекте A: пространства имен Пример1 { общественных частичный класс с1 { общественных недействительный getsomething() {возвращение результат1;} } } В проекте B: пространства имен Пример1 { общественные частичный класс с1 { public void getsomethingElse() {return result2;} } } Я хочу, чтобы иметь возможность вызова getsomething() и getsomethingElse() в projectA, но я не вижу getomethingElse() сейчас, поскольку он в другом проекте ... – neverland

+0

Создать объект B: 'var b = new B() ', затем назовите его:' b.getSomethingElse() 'в' class A'. – yamen

0

Частичные классы должны разделять пространство имен. Два частичных класса, называемых c1, являются совершенно разными классами.

Смежные вопросы