含义:: C#和PhP中的运算符

时间:2008-12-30 15:47:43

标签: c# php

在我的工作中,我遇到了像全局::(C#)或G:在Php中加载($ value)的语法,它们是什么意思?

8 个答案:

答案 0 :(得分:9)

在C#中::是名称空间别名限定符运算符,global表示全局名称空间。如果您有重叠的类和名称空间,则必须这样做。

例如,如果您有类Foo.BarBaz.Foo.Bar,那么引用Foo.Bar可能是一个含糊不清的引用,因为Foo.Bar存在于全局命名空间和{{}中1}}命名空间。但是,通过说Baz,您明确地将引用范围限定为全局命名空间,因此它不再含糊不清。

More info here

答案 1 :(得分:4)

在PHP ::中用于访问静态成员或方法,请参阅http://www.php.net/manual/en/language.oop5.static.php

答案 2 :(得分:3)

如果是C#,::被称为命名空间别名限定符。

如果存在歧义,它会确定您所在的命名空间。例如:

using MyNameSpace;

...

global::System.Data 

System.Data命名空间与MyNameSpace.System.Data区分开来。

查看::运算符上的C#引用:

http://msdn.microsoft.com/en-us/library/htccxtad.aspx

更有帮助的是,MSDN文章展示了它的用途

http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

答案 3 :(得分:2)

在基于类的面向对象编程语言(如C ++,Java,PHP,...)中,存在属性(也称为字段),它们是数据,只是变量或常量,以及作为类的功能的方法实际上是函数(例程)。 每个类都可以实例化为对象。每个对象在开头都具有基类的所有数据和功能,但是数据可以更改,并且可以从一个对象到另一个对象不同。 有2种属性和2种方法。 某些属性在类的所有对象之间共享。这意味着如果更改该类的数据,则所有实例化对象的相同数据将更改为neew值。这种属性称为类属性或静态属性(因为在定义这些变量时,在大多数语言中,您将使用static关键字)。 某些其他属性特定于每个对象。更改on对象的数据,不会影响其他对象的数据。这些被称为对象属性或实例属性。 一些方法是从一个对象调用的,有一些叫做对象的方法。这些是对象方法,要使用它们,您需要首先实例化一个类并使用该对象。通过使用类本身调用其他一些方法。这些是类方法(或静态方法),如果你想要其中一个函数,就不需要一个对象。 要使用对象属性/方法,在PHP(如C ++)中你应该使用 - >操作者:

object->method();
object->property;

要在PHP中使用类属性/方法(比如C ++),你应该使用:: operator:

class::method();
class::property;
用像Jave这样的语言运算符。用于所有属性/方法:

object.method();
class.property;

假设你有一个Circle类。此类定义了一些数据,如radius和center cordinates,以及PI值的常量。还有一种计算圆的面积的方法。

这里有一些PHP代码可以说清楚:

<?php
class Circle {
    public $radius;
    public $centerX;
    public $centerY;
    public static $PI = 3.1415;
    public function __construct($r,$x,$y) {
        $this->radius = $r;
        $this->centerX = $x;
        $this->centerY = $y;
    }
    public function getArea() {
        return self::$PI * $this->radius * $this->radius;
    }
}
$circle1 = new Circle(10,0,0);
echo $circle1->getArea() . "<br>\n";
$circle2 = new Circle(15,10,12);
echo $circle2->getArea() . "<br>\n";
Circle::$PI = 3.14;
echo $circle1->getArea() . "<br>\n";
echo $circle2->getArea() . "<br>\n";
?>

在本例中,我们定义了一个圆类,它具有对象属性(radius,centerX,CenterY),对象方法(getArea())和Class属性(PI)。 通过更改PI静态属性,两个对象的区域都将受到影响。

答案 4 :(得分:2)

考虑以下示例:

namespace  A { 
    public class MyClass { }
} 

namespace namespaceB
{
    public class A
    {
        public class MyClass { }
    }

    public class OtherClass
    {
        public A.MyClass MyAClass;
    }
}

说明:

在上面的示例中,编译器始终将MyAClass解析为namespaceB.A.MyClass类型。

如果你想让它成为A.MyClass,那么在C#2.0之前就无法做到这一点。

在C#2.0中,您将使用:public class MyOtherClass

{ public global::A.MyClass yAClass; }

表示不应使用本地命名空间范围,而应使用根命名空间。

答案 5 :(得分:1)

在C#中,global ::运算符用于确保将以下名称解释为全局名称表达式与本地名称表达式。这方面的主要用途是开发人员具有嵌套命名空间,其名称与全局命名空间相同。没有global ::运算符,就无法访​​问全局版本。

namespace Foo { 
  namespace System {
    class DateTime {} 
    class Example {
      object Example() { 
        return System.DateTime.Now; // Returns Foo.System.DateTime.Now
        return global::System.DateTime.Now; // Returns mscorlib,System.DateTime.Now
      }
    }
  }
}

答案 6 :(得分:1)

在PHP中称为范围解析运算符(Paamayim Nekudotayim),允许访问类中的成员或常量

答案 7 :(得分:0)

在C#中,::运算符是命名空间别名限定符。它用于将标识符解析为适当的命名空间,尤其是在存在歧义的情况下。

假设您通过

创建名称空间别名
using IOAlias = System.IO;

并希望声明StreamReader类的实例。你可以通过

来做到这一点
IOAlias::StreamReader sr = new StreamReader(path);

此外,您可以通过

解析到全局命名空间
global::System.IO.StreamReader sr = new StreamReader(path);