.NET частичные классы по сравнению с [закрытым] наследованием

Вы пытались использовать эту функцию? (Это то же самое, что использовал Modernizr.)

function is_touch_device() {  
  try {  
    document.createEvent("TouchEvent");  
    return true;  
  } catch (e) {  
    return false;  
  }  
}

ОБНОВЛЕНИЕ 1

document.createEvent("TouchEvent") начали возвращать true в последнем хроме ( ст. 17). Modernizr обновил это некоторое время назад. Проверьте тест Модернизра здесь .

Обновите вашу функцию так, чтобы она работала:

function is_touch_device() {
  return 'ontouchstart' in window;
}

ОБНОВЛЕНИЕ 2

Я обнаружил, что вышеупомянутое не работает на IE10 (возвращает false на поверхности MS). Вот исправление:

function is_touch_device() {
  return 'ontouchstart' in window        // works on most browsers 
      || 'onmsgesturechange' in window;  // works on IE10 with some false positives
};

ОБНОВЛЕНИЕ 3

'onmsgesturechange' in window вернет true в некоторых версиях IE для настольных ПК, так что это ненадежно. Это работает несколько надежнее:

function is_touch_device() {
  return 'ontouchstart' in window        // works on most browsers 
      || navigator.maxTouchPoints;       // works on IE10/11 and Surface
};

ОБНОВЛЕНИЕ 2018

Время идет, и есть новые и лучшие способы проверить это. Я в основном извлек и упростил способ проверки Modernizr'а:

function is_touch_device() {
  var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
  var mq = function(query) {
    return window.matchMedia(query).matches;
  }

  if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
    return true;
  }

  // include the 'heartz' as a way to have a non matching MQ to help terminate the join
  // https://git.io/vznFH
  var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');
  return mq(query);
}

Здесь они используют нестандартную touch-enabled функцию медиазапроса, что, на мой взгляд, является странной и плохой практикой. Но эй, в реальном мире, я думаю, это работает. В будущем (когда они поддерживаются всеми) эти функции медиазапроса могут дать вам те же результаты: pointer и hover.

Проверьте источник того, как Модернизр делает это .

Хорошую статью, в которой объясняются проблемы с обнаружением касания, см. В Stu Cox: вы не можете обнаружить сенсорный экран .

7
задан Mike Hofer 26 June 2009 в 17:53
поделиться

4 ответа

The whole reason Partial Classes are included in .Net is to make it easier to utilize code generation tools.

If you are generating code, use partial classes. It's really that simple. Why would you take the risk that the code might have to be re-generated down the road and you'd have to do a ton of work to re-update it with customizations?

I don't find there is much complexity to partials either - it's simply one class split over multiple files. Generated code in one file, custom code in the other.

11
ответ дан 6 December 2019 в 14:07
поделиться

I would go partial classes path. Just because it fits more natural for dividing 1 object in many parts. Even Linq2Sql uses partials. Fight with complexity with patterns and proper conventions. And it's easier to perform 'partial update' (if generated code is well structured) on partial classes.

If you aren't doing any code generating - go class inheritance way (actually, you would be forced to, cause partials won't work across different assemblies).

2
ответ дан 6 December 2019 в 14:07
поделиться

This is exactly the problem that partial classes exist to resolve. I think you may be breaking them down a little too far for practical purposes though. My gut reaction without knowing the finer details of your application would be to use a partial class file for all the generated code of a class, and a second file for all the code created by hand. Come up with a naming convention for generated partial classes and stick with it.

2
ответ дан 6 December 2019 в 14:07
поделиться

Если у вас есть тип, который должен быть сериализован (в xml) и вы хотите добавить некоторую функциональность, вы должны использовать частичный класс, а не наследование. Спасибо ///M

0
ответ дан 6 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

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