//代码如下:
//我运行的时候报无权限递归,
//发生在cat类的set方法里面,这个成员是public的
//请问是为什么啊?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
interface Ibark
{
void bark();
string name{get;}}internal class Dog : Ibark
{
string Ibark.name
{
get
{
return "dog";
}
}
void Ibark.bark()
{
Console.WriteLine("wang wang!");
}
}internal class Cat : Ibark
{
public string catname
{
get
{
return catname;
} set
{
catname = value;
}
} string Ibark.name
{
get
{
return this.catname;
}
}
void Ibark.bark()
{
Console.WriteLine("miu,miu!");
}
}namespace consoleInterface
{
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Ibark bark = dog;
bark.bark();
Console.WriteLine("the current obje is {0}",bark.name); Cat cat = new Cat(); cat.catname = "tom";
bark = cat;
bark.bark();
Console.WriteLine("the current obje is {0}", bark.name); Console.ReadLine(); }
}
}
//我运行的时候报无权限递归,
//发生在cat类的set方法里面,这个成员是public的
//请问是为什么啊?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
interface Ibark
{
void bark();
string name{get;}}internal class Dog : Ibark
{
string Ibark.name
{
get
{
return "dog";
}
}
void Ibark.bark()
{
Console.WriteLine("wang wang!");
}
}internal class Cat : Ibark
{
public string catname
{
get
{
return catname;
} set
{
catname = value;
}
} string Ibark.name
{
get
{
return this.catname;
}
}
void Ibark.bark()
{
Console.WriteLine("miu,miu!");
}
}namespace consoleInterface
{
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Ibark bark = dog;
bark.bark();
Console.WriteLine("the current obje is {0}",bark.name); Cat cat = new Cat(); cat.catname = "tom";
bark = cat;
bark.bark();
Console.WriteLine("the current obje is {0}", bark.name); Console.ReadLine(); }
}
}
{
public string m_s
{
get { return m_s;}
set { m_s = value;}
}
}这样的写法会引发递归。但是
class cl
{
public string m_s
{
get;set;
}
}这样却不会。这两种写法有什么区别?以及为什么对属性进行操作会引发递归。
这种语法,编译器会自动为你生成一个_m_s的成员。如果没有特别的需求,用这种写法就可以了。
+1
问题出在Cat类里的这个属性 public string catname
{
get
{
return catname;
} set
{
catname = value;
}
}