У Вас могут быть аргументы “ByRef” в функциях AS3?

Чтобы отключить определенный маршрут для Razor Page, вы можете попробовать IAsyncPageFilter.

public class DisableIdentityAsyncPageFilter : IAsyncPageFilter
{
    public DisableIdentityAsyncPageFilter()
    {
    }

    public async Task OnPageHandlerSelectionAsync(
                                        PageHandlerSelectedContext context)
    {

        await Task.CompletedTask;
    }

    public async Task OnPageHandlerExecutionAsync(
                                        PageHandlerExecutingContext context,
                                        PageHandlerExecutionDelegate next)
    {
        if (context.HttpContext.Request.Path.StartsWithSegments("/Identity") &&
            !context.HttpContext.Request.Path.StartsWithSegments("/Identity/Account/Login"))
        {
            context.Result = new StatusCodeResult(404);
        }
        else
        {
            await next.Invoke();
        }
    }
}

А затем настройте в Startup.cs

services.AddMvc(options => {
    options.Filters.Add(typeof(DisableIdentityAsyncPageFilter));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
5
задан Robinicks 2 December 2008 в 22:08
поделиться

6 ответов

Все в AS3 - ссылка кроме [u] ints. Сделать вывод, все, что наследовалось Object будет дан функции ссылкой.

Однако единственный способ, которым я верю Вам, может сделать это, использование контейнерный класс как Array или a String ("5" и делают conversion+math).

3
ответ дан 18 December 2019 в 05:56
поделиться

Заключение в кавычки погугленного источника:

В ActionScript 3.0 все аргументы передаются ссылкой, потому что все значения хранятся как объекты. Однако объекты, которые принадлежат примитивным типам данных, который включает булевскую переменную, Число, интервал, uint, и Строку, имеют специальные операторы, которые заставляют их вести себя, как будто они были переданы значением.

Который привел меня искать канонический источник.

15
ответ дан 18 December 2019 в 05:56
поделиться

Кажется, что Строки, ints, единицы, булевские переменные передаются Значением. Я попробовал этот небольшой отрывок в Flash, и результаты были отрицательны:

function func(a:String){
    a="newVal";
}

var b:String = "old";

trace(b)    //  old
func(b);
trace(b)    //  old

Так... Действительно ли строка является помещенным в черный список типом данных также? Булевская переменная также? Я имею в виду то, что верный способ сказать, какие типы передаются ссылкой?

6
ответ дан 18 December 2019 в 05:56
поделиться

Неправильно Неправильно Неправильно и Неправильно.. каждый Аргумент передается значением!!! факт можно изменить свойство в объекте, передал, не означает, что можно изменить сам объект. попробуйте следующий код

function Test(a:Object, b:Object):void {
   a = b;
}

function Test2():void {
   var s1:Sprite = null;
   var s2:Sprite = new Sprite;

   Test(s1,s2);
   Trace(s1);
   Trace(s2);
}

и вот результат трассировки:

null
[object Sprite]
2
ответ дан 18 December 2019 в 05:56
поделиться

Обратите внимание на тонкую разницу между примером DarthZorG и этим примером из Документы Flash:

function passByRef(objParam:Object):void 
{ 
    objParam.x++; 
    objParam.y++; 
    trace(objParam.x, objParam.y); 
} 
var objVar:Object = {x:10, y:15}; 
trace(objVar.x, objVar.y); // 10 15 
passByRef(objVar); // 11 16 
trace(objVar.x, objVar.y); // 11 16

Точка: Вы не можете изменить то, на что указывает ссылка, но можете изменить данные, на которые указывает ссылка, если эта ссылка является объектом / массивом.

0
ответ дан 18 December 2019 в 05:56
поделиться

Это все по значению, если вы понимаете программирование на C, вы будете знакомы с концепцией указателей.

Думайте об указателе как о ссылке на что-то в памяти, а все имена переменных "bob from (bob = new person();)" по сути, являются указателями, с которыми вы работаете.

Теперь, когда вы объявляете функцию, поскольку все они имеют значение By Value,

function Test(a:Object, b:Object):void {
   a = b;
}

вы можете думать, что и "a" и "b" являются новыми указателями, так что только внутри функции "Test" оба "a" и "b" существуют и указывают на что-то в памяти.

Итак, давайте используем это

var s1:Sprite = null;
var s2:Sprite = new Sprite;
Test(s1,s2);

Итак, указатели s1 и s2 ВСЕГДА будут указывать на "null" и "новый спрайт в памяти" соответственно, если они не будут изменены как s1 и s2 в их "области видимости" <- Пожалуйста, убедитесь, что вы понимаете область видимости переменных, прежде чем пытаться разобраться с этим.

И внутри функции у нас теперь есть два новых указателя "a", указывающий на "null" и "b", указывающий на "тот же спрайт в памяти, что и s2". Так как объекты и массивы по сути являются коллекциями указателей, и только два новых указателя были созданы функцией для использования "a" и "b", любые свойства / открытые переменные "указатели на данные в памяти" "a" или "b" все еще будут точно такими же, как и для "s1" и "s2" и являются точно такими же указателями.

Таким образом, внутри функции, когда "a" устанавливается в "b", на самом деле все, что происходит, это то, что указатель "a" теперь указывает на то же самое, что и "b". Но "s1" и "s2" по-прежнему указывают на то, на что они указывали раньше.

!!!! Если бы это было по ссылке, вы не смогли бы думать об "a" и "b" как о новых указателях, они были бы самими "s1" и "s2", только вы бы записали их как "a" и "b".

2
ответ дан 18 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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