Как сделать объект принадлежащим пространству имен (VS 2008)? - PullRequest
3 голосов
/ 14 февраля 2010

У меня есть пространство имен Company.Controls, которое содержит несколько элементов управления. У меня также есть класс Common, который содержит перечисления / структуры / статические методы, которые я использую во всех элементах управления.

Есть ли способ сделать так, чтобы эти "общие" части принадлежали компании. Управляет пространством имен таким образом, чтобы мне не приходилось вводить "Common.Structure"? По сути, он «общий» как в пространстве имен, так и в классе.

Просто кажется грязным и запутанным при чтении кода.

пример (все остальные элементы управления находятся в пространстве имен Blah.Controls.Common)

namespace Blah.Controls
{
    public enum ControlTouchState
    {
        Down = 0x00,
        Up = 0x01,
    }

    public Common()
    {
      //Stuff here
    }

}

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 февраля 2010

Вы не можете получить именно то, что вы хотите; в C # все методы должны быть в классе.

В зависимости от того, что находится в вашем классе Common , вы можете найти что-то более удовлетворяющее, используя методы расширения:

namespace Blah.Controls
{
    public class CommonControl { }

    public static class Common
    {
        public static void Foo(this CommonControl cc) { }
    }

    public class Control1 : CommonControl
    {
        public void Bar()
        {
            this.Foo();
        }
    }
}

Другая вещь, которую вы могли бы рассмотреть, - это использование partial классов, которые позволили бы вам написать простые обертки в другом месте:

namespace Blop.Controls
{
    public static class Common
    {
        public static void Foo() { }
    }

    public partial class Control1
    {
        public void Bar()
        {
            Foo();
        }
    }

    public partial class Control1
    {
        public void Foo()
        {
            Common.Foo();
        }
    }
} 

Очевидно, что введение некоторого наследования может устранить некоторое дублирование; Я предполагаю, что вы не хотите этого делать.

0 голосов
/ 14 февраля 2010

Есть ли какая-то причина, по которой вложенные типы в Common ДОЛЖНЫ быть вложенными? Почему бы не выделить их в свое собственное пространство имен?

namespace Common
{
    public struct Structure 
    {
        // ... 
    }

    public enum Enumeration
    {
        // ...
    }

    public class Common
    {
        // ...
    }
}

Затем вы можете использовать Общее пространство имен как таковое:

namespace Blah.Controls
{
    using Common;

    class Control
    {
        Struct myStruct;
        Enumeration myEnum;
        Common myCommon; // references the class, not the namespace
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...