Необходимо определить интерфейс, как только необходимо вызвать поведение для класса.
поведение Животного может включить Обход, Еду, Выполнение, и т.д. Поэтому Вы определяете их как интерфейсы.
Другим практическим примером является ActionListener (или Выполнимый) интерфейс. Вы реализовали бы их, когда необходимо отслеживать конкретное событие. Поэтому необходимо обеспечить реализацию для actionPerformed(Event e)
метод в классе (или подкласс). Точно так же для интерфейса Runnable, Вы обеспечиваете реализацию для public void run()
метод.
кроме того, можно было реализовать эти интерфейсы любое количество классов.
Другой экземпляр, где Интерфейсы используются (в Java) должен реализовать множественное наследование, предлагаемое в C++.
Извините, если вы не считаете это IDE, но Emacs + CEDET меня никогда не подводили. Если CEDET не идеален, у вас все еще есть голова. :)
Конечно, если бы Emacs работал с вашим SPARC, я бы не знал, но я считаю, что он будет работать нормально. Стоит потратить каждый час, чтобы научиться им пользоваться. Вот руководство о том, как начать работу.
CREATE FUNCTION dbo.itvfBinaryIPv4(@ip AS VARCHAR(15)) RETURNS TABLE
AS RETURN (
SELECT CAST(
CAST( CAST( PARSENAME( @ip, 4 ) AS INTEGER) AS BINARY(1))
+ CAST( CAST( PARSENAME( @ip, 3 ) AS INTEGER) AS BINARY(1))
+ CAST( CAST( PARSENAME( @ip, 2 ) AS INTEGER) AS BINARY(1))
+ CAST( CAST( PARSENAME( @ip, 1 ) AS INTEGER) AS BINARY(1))
AS BINARY(4)) As bin
)
go
Вот она в примере:
SELECT bin FROM dbo.fnBinaryIPv4('192.65.68.201')
--should return 0xC04144C9
go
А вот как вы могли бы использовать ее во INSERT
INSERT INTo myIpTable
SELECT {other_column_values,...},
(SELECT bin FROM dbo.itvfBinaryIPv4('192.65.68.201'))
Вы можете использовать varchar. Длина IPv4 статична, но длина IPv6 может сильно варьироваться.
Если у вас нет веской причины хранить его как двоичный, используйте строковый (текстовый) тип.
Обычно я использую простую фильтрацию VARCHAR для IP-адреса, отлично работает.
Если вы хотите фильтровать диапазоны IP-адресов, я бы разбил их на четыре целых числа.
sys.dm_exec_connections
использует varchar (48) после SQL Server 2005 SP1. Для меня это звучит достаточно хорошо, особенно если вы хотите использовать его по сравнению с вашей ценностью.
На самом деле, вы еще не увидите IPv6 в качестве мейнстрима в течение некоторого времени, поэтому я бы предпочел маршрут 4 tinyint. Сказав это, я использую varchar (48), потому что мне нужно использовать sys.dm_exec_connections
...
В противном случае. В ответе Марка Редмана упоминается предыдущий вопрос SO
Спасибо, RBarry. Я собираю систему распределения IP-блоков и сохраняю их в двоичном виде.
Я сохраняю представление CIDR (например: 192.168.1.0/24) IP-блока в поле varchar и использую 2 вычисляемых поля для хранения двоичной формы начала и конца блока. Оттуда я могу запускать быстрые запросы, чтобы узнать, выделен ли данный блок уже или его можно назначить.
Я изменил вашу функцию для вычисления конечного IP-адреса следующим образом:
CREATE FUNCTION dbo.fnDisplayIPv4End(@block AS VARCHAR(18)) RETURNS BINARY(4)
AS
BEGIN
DECLARE @bin AS BINARY(4)
DECLARE @ip AS VARCHAR(15)
DECLARE @size AS INT
SELECT @ip = Left(@block, Len(@block)-3)
SELECT @size = Right(@block, 2)
SELECT @bin = CAST( CAST( PARSENAME( @ip, 4 ) AS INTEGER) AS BINARY(1))
+ CAST( CAST( PARSENAME( @ip, 3 ) AS INTEGER) AS BINARY(1))
+ CAST( CAST( PARSENAME( @ip, 2 ) AS INTEGER) AS BINARY(1))
+ CAST( CAST( PARSENAME( @ip, 1 ) AS INTEGER) AS BINARY(1))
SELECT @bin = CAST(@bin + POWER(2, 32-@size) AS BINARY(4))
RETURN @bin
END;
go