如果要卸载main里,就必须初始化。
应写为:Dog dog = new Dog();
我也是有这个疑惑才过来的,结构里面已经有有参构造方法了也就是没有无参的构造方法,为什么他实例化的时候不提供参数呢
可以的吧 我的都可以
第一个和最后一个一样啊,第一个Dog和最后一个Dog都是Dog类啊,不是吗,我也是初学。。
//创建Dog结构
struct Dog
{
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Dog(string name)
{
_name = name;
}
}
//去Main函数里面调用Dog结构的构造方法
static void Main(string[] args)
{
Dog dog = new Dog("小明");
//dog.Name = "小明";
//dog.Sing();
Console.WriteLine("我叫{0}", dog.Name);
}
构造方法没有返回值,不需要加void。加上就错误了。
你是不是想问不使用new实例化对象的方法调用带参构造方法?
//创建Dog结构
struct Dog
{
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Dog(string name)
{
_name = name;
}
}
//去Main函数里面调用Dog结构的构造方法
static Dog dog;
static void Main(string[] args)
{
//Dog dog = new Dog("小白");
dog.Name = "小白";
dog.Sing();
Console.WriteLine("我叫{0}", dog.Name);
}
洁身存储空间(在堆栈上),可以互相直接赋值,兼容C和C++代码
这两句话是分开的,首先 struct结构中不允许字段有初始值,指的是 在编写 Struct结构内部的字段时,这些字段不能有初始值。
eg:
struct Dog
{
string _name;//这里的_name,就是 在struct 结构内部的字段,它不允许有初始值。这里我们就没有设置初始值;
}
其次,必须为所有字段赋值,指的是 在编写Struct结构的构造器时候,必须为所有的字段赋值。
eg:
struct Dog
{
string _name;//这里的_name,就是 在struct 结构内部的字段,它不允许有初始值。这里我们就没有设置初始值;
public void sing(string _name)//这里是构造器,
{
_name=1; //在构造器中我们必须为所有的字段赋值(有多少个字段,赋值多少个)
}
}
=================================================
头一把给别人回答问题,以前都是我查东西,问别人。希望能帮到你~~~嘿嘿 (留个纪念2016.11.23 霍 天气:就像个大冰柜)
一般来讲,我们调用其他类里面的方法或属性就需要实例化,具体语法类似 Child c1 = new Child。
但Struct 类中写好了带参方法或属性,是可以直接从其他类里面调用的。不需要实例化的过程 也就是(Child c1 = new Child。)的过程
在课程中 老师使用 static Dog dog,而不是用(Dog dog = new Dog();)
如果写在同一目录下,static Dog dog 都不用写了
首先要理解值类型和引用类型的不同;
值类型:例如int double等;以这种类型定义的变量,我们在实际定义中是直接调用的变量的值;
引用类型:例如 类 object 等;我们在定义对象的时候需要使用到new关键字,也就是我们需要创造一个新的空间来存储对象;实际上它是分两部分存储的;我们定义的对象名存储的是对象值得地址,这个地址存储在堆空间中,然后这个地址指向对象的值,这个值实际上是存储在栈空间中的。
总结:
1、它们存储的位置不一样
2、如果是引用类型,当两个对象指向同一个地方,修改某一个的时候,其它对象的值会发生改变
无法使用集合初始值设定项来初始化类型为“string[]”的对象。