Могу ли я добавить методы расширения в существующий статический класс?

Чтобы доказать, что график является циклическим, вам просто нужно доказать, что он имеет один цикл (край указывает на себя прямо или косвенно).

В DFS мы берем одну вершину за раз и проверяем, имеет цикл. Как только будет найден цикл, мы можем опустить проверку других вершин.

В BFS нам нужно отслеживать множество вершинных ребер одновременно, а чаще всего в конце вы узнаете, имеет ли он цикл. По мере роста размера графика BFS требует большего пространства, вычислений и времени по сравнению с DFS.

501
задан Bill the Lizard 11 December 2009 в 15:01
поделиться

6 ответов

Нет. Дополнительные методы требуют переменной экземпляра (значение) для объекта. Вы можете однако, писать статическую обертку вокруг эти ConfigurationManager интерфейс. При реализации обертки Вам не нужен дополнительный метод, так как можно просто добавить метод непосредственно.

 public static class ConfigurationManagerWrapper
 {
      public static ConfigurationSection GetSection( string name )
      {
         return ConfigurationManager.GetSection( name );
      }

      .....

      public static ConfigurationSection GetWidgetSection()
      {
          return GetSection( "widgets" );
      }
 }
260
ответ дан tvanfosson 11 December 2009 в 15:01
поделиться

Я пытался сделать это с Системой. Среда назад, когда я изучал дополнительные методы и не был успешен. Причина, как другие упоминают, потому что дополнительные методы требуют экземпляра класса.

4
ответ дан Robert S. 11 December 2009 в 15:01
поделиться

Вы не можете добавить статичный методы к типу. Можно только добавить (псевдо-) методы экземпляра для экземпляра типа.

точка this модификатор должен сказать компилятору C# передавать экземпляр левой стороне . как первый параметр статического/дополнительного метода.

В случае добавления статических методов для типа, нет никакого экземпляра для передачи для первого параметра.

5
ответ дан Brannon 11 December 2009 в 15:01
поделиться

Нет. Дополнительные определения метода требуют экземпляра типа, который Вы расширяете. Его неудачник; я не уверен почему его необходимое...

10
ответ дан Will 11 December 2009 в 15:01
поделиться

Не возможный.

И да я думаю, что MS сделал ошибку здесь.

Их решение не имеет смысла и вынуждает программистов записать (как описано выше) бессмысленный класс обертки.

Вот хороший пример: Попытка расширить статический класс Поблочного тестирования MS Утверждает: Я хочу еще 1, Утверждают метод AreEqual(x1,x2).

единственный способ сделать это должно указать на различные классы или записать обертку, приблизительно 100 с различных Утверждают методы. , Почему!?

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

45
ответ дан Tom Deloford 11 December 2009 в 15:01
поделиться
  • 1
    @AmrFaisal Видят мой ответ ниже о том, как сделать это с одним единым запросом. – WhyNotHugo 5 July 2012 в 18:56

Может быть, вы могли бы добавить статический класс со своим пользовательским пространством имён и тем же именем класса:

using CLRConsole = System.Console;

namespace ExtensionMethodsDemo
{
    public static class Console
    {
        public static void WriteLine(string value)
        {
            CLRConsole.WriteLine(value);
        }

        public static void WriteBlueLine(string value)
        {
            System.ConsoleColor currentColor = CLRConsole.ForegroundColor;

            CLRConsole.ForegroundColor = System.ConsoleColor.Blue;
            CLRConsole.WriteLine(value);

            CLRConsole.ForegroundColor = currentColor;
        }

        public static System.ConsoleKeyInfo ReadKey(bool intercept)
        {
            return CLRConsole.ReadKey(intercept);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteBlueLine("This text is blue");   
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey(true);
        }
    }
}
17
ответ дан 22 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: