我即将开始学习C#并遇到zetcode C# tutorial(对于精彩教程网站或pdf的任何建议表示赞赏)。由于我之前使用Python进行了一些编程,我发现C#并不那么困难。但是,有一点让我感到困惑的是从网站上使用这样的东西。
using System;
public class Being {}
public class CSharpApp
{
static void Main()
{
Being b = new Being();// I don't understand this
Console.WriteLine(b);
}
}
为什么不呢:
b=new Being ();
为什么网站在两个地方使用班级名称?这只是C#的方式还是它的一种写作方式?
答案 0 :(得分:12)
第一部分是b
Being b;
这实际上告诉编译器您将使用名为Being
b
类型的变量
第二部分是b
b = new Being();
为变量b
分配一个对象,在本例中,该对象是Being
类的新实例
c#允许您将两个部分合并为一行,从而产生以下结果:
Being b = new Being();
答案 1 :(得分:4)
第一个“存在”定义变量b
的类型。这表示“b
是对Being
类型的对象的引用”。您可以将其更改为var b = Being()
,编译器将根据等号右侧的表达式推断B
的类型。
第二个“存在”是表达式的一部分,该表达式提供变量b
的初始值。在这种情况下,它是对默认构造函数Being()
的调用。您可以通过多种方式指定b
的值:
Being b = null; // don't give it any value yet
Being b = new Being(); // make a new Being object using the default constructor
Being b = new Being("abcde"); // use a different custom constructor
Being b = GiveMeABeing(); // call some other method that will return a Being object
答案 2 :(得分:3)
变量声明中的第一个Being
告诉编译器如何识别和处理对象。 new Being()
告诉编译器如何构建(实例化)对象。当您利用接口和子类时,这类事情很有用。
abstract class IMusicalInstrument {
public Play();
}
class Trumpet : IMusicalInstrument {
public Play() {
// etc.
}
}
class Piano : IMusicalInstrument {
public Play() {
// etc.
}
}
这样做,您可以利用返回未知IMusicalInstrument
的方法:
IMusicalInstrument instrument = GetARandomInstrument();
..请放心,你可以Play()
他们,尽管不知道完全他们是什么。
答案 3 :(得分:1)
第一行是定义一个类
public class Being {}
,第二个代码正在创建该类的实例。
Being b = new Being()
答案 4 :(得分:1)
为什么不呢:
b = new Being(); ?
我假设您了解=
运算符,它将rhs分配给lhs。在上面的陈述中,您正在为b
分配一些内容吗?
编译器如何知道b
是什么?编译器不知道b
是什么!所以你必须说b
是Being
类型的局部变量,这是以下代码所做的
Being b;
现在没有任何内容b
你想在b中存储一些东西以便正确使用它?因此,创建type Being
的实例并存储它。这就是以下代码所做的事情
b = new Being();
我们合并两者并告诉编译器b
属于Being
类型,它包含Being
的新实例。
Being b = new Being();
希望这有帮助
答案 5 :(得分:0)
这就是C#的工作方式。您需要提供类的名称。如果你不喜欢这种语法 - 你也可以这样做:
var being = new Being();
答案 6 :(得分:0)
您必须声明类型然后实例化类型,因此在您的示例中,您将指定要声明Being
然后实际创建(读取:new up)Being
对象
至于你为什么需要指定它两次的问题,你的声明类型可能是一个基类,但你实例化一个派生类,如下所示:
public class Animal {}
public class Human : Animal {}
现在,在您的代码中,您可以声明Animal
,但实际上会实例化Human
,因为Human
是Animal
,如下所示:
Animal myHuman = new Human();
答案 7 :(得分:0)
C#中的对象是在现实生活对象之后建模的。例如,球具有半径,弹性,重量,颜色等。您还可以对球执行操作,例如投掷,滚动,掉落,旋转等。在C#中,您将为此创建类似于此的类定义。球:
public class Ball
{
// Radius in inches
public double Radius { get; set; }
public double Bounciness { get; set; }
// Weight in lbs
public double Weight { get; set; }
public string Color { get; set; }
// more properties
// constructor - this is called when your class is instantiated (created)
public Ball()
{
}
// throw the ball
public void Throw()
{
// method for throwing ball
}
// roll the ball
public void Roll()
{
// method for rolling ball
}
// drop the ball
public void Drop()
{
// method for dropping ball
}
// spin the ball
public void Spin()
{
// method for spinning the ball
}
// more methods for interacting with a ball
}
然后你会声明一个Ball的实例,设置属性并调用这样的方法:
Ball ball = new Ball();
ball.Color = "Red";
ball.Weight = 1.2; // 1.2 lbs
ball.Radius = 12; // 12 inches
ball.Bounciness = 0.2; // for use in a physics engine perhaps
ball.Throw(); // throw the ball
ball.Drop(); // drop the ball
// etc