2016-10-11 58 views
-1

我想在vb.net中創建一個動態對象,這將使用PHPas簡單它具有魔術方法的getter,setters和調用方法,但我需要這樣做在vb.netvb.net相當於PHP的魔術方法

在PHP:

<?php 
    class foo { 
     private $vars = array() 

     public function __construct() {} 

     public function __get($name) { 
      if (in_array($name, $this->vars)) { 
       return $this->vars[$name]; 
      } 
     } 

     public function __set($name, $value) { 
      $this->vars[$name] = $value; 
     } 

     public function __call($method, $arguments) { 
      ..... 
     } 

     public function __callStatic($method, $arguments) { 
      ..... 
     } 
    } 
?> 

然後我就可以使用這個對象,如:

<?php 
    // Calles foo::__construct as normal 
    $myFoo = new foo(); 

    // Calls the __set method parsing the values $name as "myVar1" and $value as "foo" 
    $myFoo->myVar1 = "foo"; 
    // Runs the __set method parsing the values $name as "myVar2" and $value as "bar" 
    $myFoo->myvar2 = "bar"; 

    // Calls the __get method parsing the value $name as "myVar1" 
    // and then a seccond call to __get parsing $name as "myVar2" 
    echo $myFoo->myVar1 . $myFoo->myVar2 

    // Calls __call parsing $name as "foobar" and $values as null 
    $myFoo->foobar(); 

    // Calls __callStatic parsing $name as "barfoo" and $values as null 
    foo::barfoo(); 
?> 

能VB.NET即使有這種編程基層應付,或只是不可能呢?

+0

關於'get'and'set'this [answer](http://stackoverflow.com/ a/20152225/5457643)可能會有幫助。 – Turamarth

+0

'get'和'set'部分很簡單,只需使用'Dictionary(Of String,Object)'或者通用的方式'public class Magic(Of T)... Dictionary(Of String,T)''。 'call'和'callStatic'可以通過[Reflection]來完成(http://www.codeproject.com/Articles/206412/Reflection-An-Introduction-to-Reflection-in-NE)。 –

+0

在其他帖子上的答案不是我所要求的,我更新了我的問題,以反映這一點,並添加更多的細節。 – Chris

回答

2

基本上要做到這一點,這一切都恢復到:是VB.NET中的動態語言?

答案是否定的。

那麼,動態(如PHP)和靜態(如VB .Net)語言之間有什麼區別,哪一個最好?

Here is an answer I found here

也不是 「更好」。他們優化不同的變量。你想優化哪個變量取決於你想要完成什麼。

所有語言都設計用於將人類可讀的代碼翻譯成機器指令。動態語言(Lisp,Perl,Python,Ruby)旨在優化程序員的效率,因此您可以使用較少的代碼實現功能。靜態語言(C,C++等)旨在優化硬件效率,以便您編寫的代碼儘可能快地執行。

動態語言的關鍵定義特徵是整個語言始終可用。這意味着您可以在編譯時執行代碼,並在執行時編譯代碼。這與其他功能(一流功能,內省)相結合,可以實現Metaprogramming,可以自行修改的程序。這使得程序員可以用靜態語言完成相同的任務,並且在某些情況下允許您執行靜態語言中根本無法完成的任務。然而,所有這些魔法都是以犧牲執行速度爲代價的。

靜態語言沒有太多(如果有的話)幕後的魔法,所以開銷很少。由於編譯階段和執行階段完全解耦,編譯器可以運行更長時間並生成更好的優化機器碼。對於一些任務來說,靜態代碼可能比動態語言快幾個數量級。

這兩種語言都有自己的位置。 Perl,Python和Ruby對大多數日常任務來說都是偉大的語言 - 但它們全都是用C語言編寫的。

0

在長時間的討論後短,沒有辦法在VB.net