111,098
社区成员




class Father
{
protected string Name;
}
class BigSon:Father
{
public string name
{
set { Name = value; }
get { return Name; }
}
}
class smallSon:Father
{
public string name
{
get { return Name; }
}
public smallSon(string pName)
{
Name = pName;
}
}
//使用
BigSon bs = new BigSon();
bs.name = "Mr.zhang";
MessageBox.Show(bs.name);
smallSon ss = new smallSon("Mr.Li");
MessageBox.Show("Name is:"+ss.name);
很想知道,lz用
Father bs = new BigSon();
Father ss = new SmallSon();
类型用Father是想达到什么效果?
类的设计,从需求中抽取共同的东西,作为父类,个性化的东西放到子类具体实现public class B: A
{
public override string XXX
{
set
{
throw new Exception("不给你提供。");
}
...............
这种形式。
如果连接口形式都不能兼容,那么还说什么面向对象设计和开发呢? static void Main(string[] args)
{
Father bs = new BigSon();
Father ss = new SmallSon();
bs.Name = "BigSon";
ss.Name = "SmallSon";
}
class Father
{
string name;
public string Name
{
get
{
return name;
}
set
{
if (this.GetType().GetProperty(nameof(Name)).GetAccessors()?.Any(p => p.IsSpecialName && p.Name == "set_" + nameof(Name)) ?? false)
{
name = value;
}
else
{
throw new Exception("不支持");
}
}
}
}
class BigSon:Father
{
}
class SmallSon : Father
{
new public string Name
{
get
{
return base.Name;
}
}
}
class Program
{
static void Main(string[] args)
{
User user1 = new UserOne();
user1.Name = "张三";
Console.WriteLine(user1.Name); // Output: 张三
User user2 = new UserTwo();
user2.Name = "李四";
Console.WriteLine(user2.Name); // Output: 亚历山大
Console.Read();
}
}
class User
{
public virtual string Name { set; get; }
}
class UserOne : User
{
//使用new关键字的确可以去掉set,但是当用父类引用子类变量时
//Name属性返回的还是父类该属性的值。
public new string Name { get { return "尼古拉斯"; } }
}
class UserTwo : User
{
//使用override来重写的话,返回的就是子类本身的值了
//可是这样你的set也必须跟着重写,去不掉了
public override string Name
{
get { return "亚历山大"; }
//安照#1大佬的说法,这里只能退而求其次的抛出一个未实现异常
set { throw new NotImplementedException(); }
}
}
static void Main(string[] args)
{
User1 u1 = new User1() ;
u1.id = 1; //这里会报错,u1.id只读
User u = new User();
u.id = 1; //没问题
User u2 = new User1();
u2.id = 1; //没问题
Console.ReadLine();
}
public class User
{
public virtual int id { get; set; }
public virtual string name { get; set; }
public virtual string buyer { get; set; }
public virtual string idArr { get; set; }
}
public class User1:User
{
//补充一下,这个例子用 override 也可以
public new int id { get; }
}