Делает статичный, не подразумевают состояния

, Который является более быстрым, встроенным Linq-to-Sql или Linq-to-Sql с помощью Tsql Sprocs

... и является там случаями, где лучше использовать серверную сторону (Sproc) или клиентский (встраивают Linq), запросы.

7
задан Kane 27 October 2009 в 01:06
поделиться

13 ответов

Static nearly means global. There is still an instance, and there is still state in that instance, but it is the static instance, which means there is only one and all callers always refer to that one.

7
ответ дан 6 December 2019 в 06:37
поделиться

does a method marked as static imply that it requires no state

1) No. You cannot say static methods imply that it requires no state because static methods can access static/singleton resources.

a majority of cases should stateless methods be made static

2) Yes. Methods that require no state, therefore require no instance, should be generally made static.

5
ответ дан 6 December 2019 в 06:37
поделиться

A static method, in C#, can access the static variables of its containing class, and if it does, it's not stateless. I've seen some painful instances of non-reentrant "stateless" static methods triggering fun race conditions.

A truly stateless method can indeed be made static, and generally should.

3
ответ дан 6 December 2019 в 06:37
поделиться

Мне довольно страшно сказать, что без сохранения состояния это то же самое, что статический , поскольку это два разных мира. Без сохранения состояния означает, что состояние не сохраняется, то есть идеальным примером является HTTP-соединение (после отправки данных соединение закрывается и память не сохраняется), где мы фактически пытаемся сделать все возможное, чтобы поддерживать состояние независимо (вход в систему состояние для одного).

Статический, с другой стороны, - это термин, используемый для описания способа вызова метода. В C # это означает, что метод может быть вызван без экземпляра класса, но экземпляр класса не совпадает с состоянием. По-прежнему существует статический экземпляр, который отлично поддерживает состояние: любая статическая переменная-член, поле или свойство может поддерживать состояние. Статический метод или класс также отлично может поддерживать состояние с помощью файлов с отображением в памяти, базы данных или чего-то еще. Статика - это соглашение о вызовах, не более того и не связанное с безгражданством или нет.

3
ответ дан 6 December 2019 в 06:37
поделиться

Я думаю, что его заявление имеет столько же смысла, сколько «Демократии должны использовать желтые бумажные бюллетени».

Он смешивает концепцию дизайна высокого уровня «услуги без гражданства» с технической реализацией низкого уровня. подробно "использование статических классов".

Службы без сохранения состояния могут (и были) реализованы на языках, которые поддерживают только статические переменные (например, COBOL, RPG) и языках, которые даже не допускают статические переменные (Erlang и т. д.).

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

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

3
ответ дан 6 December 2019 в 06:37
поделиться

static can be stateful. you just have to define static containers for said state. and the containers are shared among all calls to your static methods.

1
ответ дан 6 December 2019 в 06:37
поделиться

Краткий ответ на ваш вопрос - «нет», static не подразумевает «отсутствие состояния».

Что касается других ваших комментариев, static можно использовать, чтобы помочь вам реализовать службу без сохранения состояния, но одного статического недостаточно. Еще один инструмент / метод, помогающий сделать что-то без состояния, - это использование неизменяемых структур данных. Это (в настоящее время) не одна из сильных сторон C #, особенно по сравнению с F #.

1
ответ дан 6 December 2019 в 06:37
поделиться

Помимо перефразирования всех определений «статики», которые можно пройти, ответ - «да». Статические методы могут легко изменять состояние самого класса ( представлены через статические переменные), и даже изменяют состояние экземпляров класса (особенно, когда им передается экземпляр или набор экземпляров). Однако в большинстве случаев вы будете использовать статические методы в случаях, когда состояние не изменяется. Самый важный пример - найти или создать экземпляр (фабричные методы).

Тем не менее, настоящий ответ - «нет». В реальной жизни (например, веб-службы через HTTP или взаимодействие с любым видом Orb) службы никогда не раскрывают свои методы службы с использованием реальных статических методов. Обычно вы вызываете статические методы, чтобы получить экземпляр службы (или экземпляр фабрики служб, из которой вы получаете экземпляр!), А затем работаете с этим. Это связано с тем, что прокси-сервер службы должен внутренне отслеживать, где он находится. Итак, хотя ваши методы кажутся вам безгражданскими, на самом деле это не так.

Надеюсь, это не слишком запутало :)

1
ответ дан 6 December 2019 в 06:37
поделиться

Статический класс не имеет состояния. В нем все еще могут быть переменные, которые, хотя и являются статическими, имеют состояние.

Статический класс без каких-либо переменных уровня класса не имеет состояния. Он не содержит данных.

1
ответ дан 6 December 2019 в 06:37
поделиться

Every class has a class definition structure, where static fields are represented and stored. Every "instance" of the class has access to the static fields stored in the class definition (a data structure caleld CORINFO_CLASS_STRUCT). Even when NO instances have been created, code anywhere in your assembly can access these static class-level fields by using the syntax classname.StaticFieldName, without any instance at all.

Since the values stored in these static class-level fields are persisted, they are definitely state. In fact, they are state shared by not only any instances of the class that might exist, they are shared throughout the assembly, whether any instances have been created or not.

Even more significant, since once a CORINFO_CLASS_STRUCT class definition has been loaded, unlike a true instance of the class, it is never unloaded until the assembly (or the AppDomain) is unloaded, so it is arguably more stateful than any instance field defined in a class, because an instance field dissapears when the instance gets garbage collected.

For more information check out CORINFO_CLASS_STRUCT link to Don Boxes' great book, Essential .Net

1
ответ дан 6 December 2019 в 06:37
поделиться

If you want a single instance with state, use a singleton pattern; it makes the intent clear that you're working with a single-occurrence object.

From that, I would then treat all static classes and methods as stateless. It just helps keep sanity.

-1
ответ дан 6 December 2019 в 06:37
поделиться

static - это ключевое слово языка, а state - это концепция дизайна. Между этими двумя вещами существует очевидная связь, но это отношение конкретного к метафизическому, а не причинно-следственная связь. Статические методы могут ссылаться на некоторые виды информации о состоянии.

Что касается методов без сохранения состояния, здесь мы говорим о методе, который не ссылается на экземпляр класса, то есть указатель this. Отмечая эти методы как статические, вы улучшаете ясность кода и соответствуете лучшим практикам. Обратите внимание, что в этом случае мы говорим об особом виде «безгражданства» и не делаем общих комментариев об использовании контекстов с отслеживанием состояния.

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

That is generally correct. However you can have static variables, which allow your static methods to have state. For instance, take this FooBarFactory class:

class FooBarFactory
{
    private static _id = 0;
    public FooBar MakeAFooBar()
    {
        FooBar foo = new FooBar();
        foo.ID = _id;
        _id++;
    }
}
class FooBar
{
    public int ID {get;set;}
}

In that case your static method has a minimum of state, but it's (probably) neccessary.

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

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