小编Edw*_*uff的帖子

这个模式有名字吗?(C#编译时类型安全与"params"不同类型的args)

这个模式有名字吗?

假设您要创建一个采用可变数量参数的方法,每个参数必须是一组固定类型(以任何顺序或组合),以及您无法控制的某些类型.一种常见的方法是让您的方法接受Object类型的参数,并在运行时验证类型:

void MyMethod (params object[] args)
{
    foreach (object arg in args)
    {
        if (arg is SomeType)
            DoSomethingWith((SomeType) arg);
        else if (arg is SomeOtherType)
            DoSomethingElseWith((SomeOtherType) arg);
        // ... etc.
        else throw new Exception("bogus arg");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,让我们说,像我一样,你沉迷于编译时类型安全性,并希望能够在编译时验证方法的参数类型.这是我想出的一种方法:

void MyMethod (params MyArg[] args)
{
    // ... etc.
}

struct MyArg
{
    public readonly object TheRealArg;

    private MyArg (object obj) { this.TheRealArg = obj; }

    // For each type (represented below by "GoodType") that you want your 
    // method to accept, …
Run Code Online (Sandbox Code Playgroud)

c# params type-safety

19
推荐指数
1
解决办法
590
查看次数

你怎么称呼一组共享共同背景的Javascript闭包?

我一直在努力学习闭包(在Javascript中),这种方式在使用C#和C++多年后伤害了我的大脑.我想我现在有一个基本的理解,但有一件事困扰我:我在这个Quest for Knowledge中访问了很多网站,我没有看到任何一个词(甚至是一个简单的双字短语),意思是"一套Javascript闭包共享一个共同的执行上下文".例如:

function CreateThingy (name, initialValue)
{
    var myName = name;
    var myValue = initialValue;

    var retObj = new Object;

    retObj.getName = function() { return myName; }
    retObj.getValue = function() { return myValue; }
    retObj.setValue = function(newValue) { myValue = newValue; }

    return retObj;
};

从我读过的内容来看,这似乎是实现数据隐藏的一种常见方式.CreateThingy返回的值当然是一个对象,但是你会将那些作为该对象属性的函数集称为什么?每一个都是一个闭包,但我想用一个名字来描述(和思考)所有这些作为一个概念实体,我宁愿使用一个普遍接受的名称而不是一个.

谢谢!

- 艾德

javascript closures

5
推荐指数
1
解决办法
482
查看次数

标签 统计

c# ×1

closures ×1

javascript ×1

params ×1

type-safety ×1