Принятие Вас спрашивает, почему Вы не можете сделать этого:
public interface IFoo {
void Bar();
}
public class Foo: IFoo {
public static void Bar() {}
}
Это не имеет смысла мне, семантически. Методы, определенные в интерфейсе, должны быть там для определения контракта для взаимодействия с объектом. Статические методы не позволяют Вам взаимодействовать с объектом - при нахождении в положении, где реализация могла быть сделана статичной, Вы, возможно, должны спросить себя, если тот метод действительно принадлежит интерфейса.
<час> Для реализации примера я дал бы Животному свойство константы, которое все еще позволит ему быть полученным доступ от статического контекста и возврата, которые оценивают в реализации.public class Animal: IListItem {
/* Can be tough to come up with a different, yet meaningful name!
* A different casing convention, like Java has, would help here.
*/
public const string AnimalScreenName = "Animal";
public string ScreenName(){ return AnimalScreenName; }
}
Для более сложной ситуации, Вы могли всегда объявлять другой статический метод и делегировать к этому. В попытке придумывает пример, я не мог думать ни о какой причине, Вы сделаете что-то нетривиальное и в статическом контексте и в контексте экземпляра, таким образом, я сэкономлю Вас блоб FooBar и возьму его в качестве признака, что это не могла бы быть хорошая идея.
Это может быть что-то вроде
urlpatterns = patterns('',
(r'^item/value/(?P<value>\d+\.\d{2})/$', 'myapp.views.byvalue'),
... more urls
)
url не должен начинаться с косой черты.
в представлениях вы можете иметь функцию:
def byvalue(request,value='0.99'):
try:
value = float(value)
except:
...
Если принимаемые значения составляют только 0,01 или 0,05 доллара, шаблон harto может быть указан следующим образом:
r"^/item/value/(\d\.\d{2})$"
Я не знаю конкретно о Django, но он должен соответствовать URL-адресу:
r"^/item/value/(\d+\.\d+)$"