2015-06-19 73 views
-3

使用一个变量这是我的主类人从不同的类和方法到另一个类和方法

public class Person 
{ 
    public void SetAge(int n) 
    { 
     n = 20; 
    } 
    static void Main(string[] args) 
    { 

    } 
} 

,我想访问n个variabe在这个继承类学生

class student : Person 
{ 

    public void GoToClasses() 
    { 
     Console.WriteLine("I am going to class"); 
    } 
    public void ShowAge() 
    { 
     Console.WriteLine("My age is {0}",n); 
    } 
} 

我尝试使用Person.n或SetAge(20)或SetAge(n),它不会工作!

回答

2
public class Person 
{ 
    public int Age {get; set;} 
} 

以上表示一个基本对象。

使用案例:

Person person = new Person(); 
person.Age = 25; 

其它对象补充:

public class Person 
{ 
    public Date BirthDate {get; set;} 
    public int Age { get { return (DateTime.Now.Year - BirthDate.Year); } } //read only 
} 
+0

我尽量保持我的对象类尽可能基本。如果有任何需要逻辑的东西,我创建类来操作项目。例。我为每个对象都有一个存储库类(对于我而言,这些对象表示数据记录)。因此,我将拥有一个执行我的CRUD操作的PersonRepo。 –

0

这里是你的基类:

public class Person 
{ 
    public int Age {get; set;} 
} 

这里是你的继承类:

class student : Person 
{ 
    public void ShowAge() 
    { 
     Console.WriteLine("My age is {0}",Age); 
    } 
} 
0

您必须首先在Person类中声明“n”变量。 试试这个:

public class Person 
{ 
    public int n; 
    public void SetAge() 
    { 
     n = 20; 
    } 

static void Main(string[] args) 
    { 

    } 
} 

你不应该设置方法的参数“SetAge(INT N)”当您以后更改此参数。在这种情况下毫无意义。

2

正如Andrew指出的那样,您没有访问该变量的方法。不仅;类字段默认为私人访问。

链接:What are the Default Access Modifiers in C#?

安德鲁写你的代码,让你一个属性,它是没有完全必要的,但它是让getter和setter存取方法,最简单的方法。

如果您只希望您的继承类能够访问,同时仍然限制您的类以外的访问,请使用受保护的访问修饰符。

编辑:我误解了这个问题。你不仅不能从函数外部访问方法参数n,我甚至不知道你为什么要这样做。只要做一下安德鲁说的话,并对可变范围进行一些研究。

+0

虽然准确,但关于默认为私人的班级字段的说明似乎没有意义,因为没有字段,因此绝大多数肯定不是问题的任何部分(事实上,没有字段是更大的问题!)。 – Chris

+0

我误解了这个问题。编辑。 –

+0

'n'已足够奇怪地声明为方法的一个参数。该方法与您期望的SetAge方法不同(您不希望它决定设置和忽略输入参数的年龄)。原始代码只是非常困惑,这使得确定哪个部分需要关注作为一个答案很棘手(只是解决了问题,就好像它可能会让OP仍然对这里演示的其他概念感到困惑。) – Chris

1

n不是Person的暴露财产。您可以将其公开或从SetAge(int n)返回int

揭露N:

public int n {get; set; } 

返回一个int:

public int SetAge(int n) 
{ 
    // this is not the normal way to set via a method. you don't normally 
    // set the input variable to a static value like this. 
    n = 20; 
    return n; 
} 
0

你应该声明的变量N与保护或公共可视性类字段。 像这样:

public class Person 
{ 
    protected int n; 

    public void SetAge(int n) 
    { 
     n = 20; 
    } 
} 

或者你可以使用一个公共财产为其他的答案在学生班级已经

public class Person 
{ 
    public int Age {get; set;} 
} 

显示,这样,您就可以使用这样的

public class Student : Person 
{ 
    public void ShowAge() 
    { 
     Console.WriteLine("My age is {0}", Age); 
    } 
} 

或者像这样

public class Student : Person 
{ 
    public void ShowAge() 
    { 
     Console.WriteLine("My age is {0}", n); 
    } 
} 
相关问题