Существует хитрый способ проверить его на наличие расширений с разрешением «вкладки»:
chrome.tabs.query({url:'chrome-devtools://*/*'}, function(tabs){
if (tabs.length > 0){
//devtools is open
}
});
Также вы можете проверить, открылся ли он для вашей страницы:
chrome.tabs.query({
url: 'chrome-devtools://*/*',
title: '*example.com/your/page*'
}, function(tabs){ ... })
Общая политика дизайна C # заключается в том, чтобы вынудить вас указать, где есть потенциальная двусмысленность. Перед лицом инструментов рефакторинга, которые позволяют сразу менять, статичны вещи или нет, такая позиция великолепна - особенно для подобных случаев. Вы увидите много других подобных случаев (переопределение вместо виртуального, новое для затенения и т. Д.).
В общем, удаление этого типа места для путаницы сделает код более понятным и заставит вас содержать свой дом в порядке.
РЕДАКТИРОВАТЬ: В хорошем сообщении Эрика Липперта обсуждается еще одна причина такой двусмысленности, ведущей к обнаруженной вами ошибке
]Вот отрывок из C # 3. Спецификация языка 0.
Сигнатура метода должна быть уникальной в классе, в котором этот метод объявлен. Сигнатура метода состоит из имени метода, количества параметров типа и числа, модификаторов и типов его параметров. Сигнатура метода не включает тип возвращаемого значения.
Модификатор 'static' не является частью подписи, поэтому ваш пример нарушает это правило уникальных подписей.
Я не знаю причины этого правила, хотя.
Я думаю, что нет никаких технических причин для запрета этого, но это сделано для того, чтобы защитить программиста от самого себя. Рассмотрим следующий пример:
public static void Main()
{
BlockHeader BlockHeader = new BlockHeader();
BlockHeader.Peek();
}
Приведенный выше пример вполне допустим, но если бы описанная вами ситуация была разрешена, можно ли было бы ее прочитать? Можете ли вы в мгновение ока увидеть, был ли вызван метод экземпляра или статический метод?