当前位置:  开发笔记 > 编程语言 > 正文

是否可以用C#以外的语言实现属性?

如何解决《是否可以用C#以外的语言实现属性?》经验,为你挑选了3个好方法。

在最近的一次C#和WPF中,我喜欢C#的属性:

public double length_inches
{
    get { return length_metres * 39.0; }
    set { length_metres = value/39.0; }
}

当然,注意到length_metres可能会从字段变为属性,而代码无需关心.WPF还可以非常愉快地将UI元素绑定到对象属性.

当我第一次学习类和对象时,我认为有一种方法可以做到,因为它看起来很明显!隐藏类中复杂性的关键在于您不再需要关心存储的内容.但直到现在才看到它.

有趣的是,我第一次看到它在VB.Net中完成.OO纯度的前沿.

问题是,我可以重新使用我经常使用的其他语言的属性,比如javascript,python,php吗?在javascript中,如果我将一个变量设置为一个闭包,我不会再次获得闭包,而不是它的结果吗?



1> Jarret Hardi..:

Python绝对支持属性:

class Foo(object):

    def get_length_inches(self):
        return self.length_meters * 39.0

    def set_length_inches(self, val):
        self.length_meters = val/39.0

    length_inches = property(get_length_inches, set_length_inches)

从Python 2.5开始,只读属性存在语法糖,2.6中也存在可写糖:

class Foo(object):

    # 2.5 or later
    @property
    def length_inches(self):
        return self.length_meters * 39.0

    # 2.6 or later
    @length_inches.setter
    def length_inches(self, val):
        self.length_meters = val/39.0



2> Zach..:

在JavaScript中:

var object = {
  // .. other property definitions ...
  get length_inches(){ return this.length_metres * 39.0; },
  set length_inches(value){ this.length_metres = value/39.0; }
};



3> Brian Rasmus..:

在C#中,属性主要只是一个编译器功能.编译器生成特殊方法get_PropertyNameset_PropertyName计算调用等.它还设置specialname了方法的IL属性.

如果您选择的语言支持某种类型的预处理器,您可以实现类似的功能,但除此之外您几乎完全坚持使用的功能.

当然,如果您正在实现自己的.NET语言,那么您也可以执行C#编译器所做的事情.

由于实现细节,字段和属性之间实际上存在细微差别.有关详情,请参阅此问题.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有