2014년 10월 22일 수요일

22. [C#,닷넷강좌]C# virtual 한정자 virtual, 가상함수,메서드[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육]

22. [C#,닷넷강좌]C# virtual 한정자  virtual, 가상함수,메서드

virtual 키워드는 메서드속성인덱서 또는 이벤트 선언을 한정하는 데 사용되며 파생 클래스에서 재정의될 수 있다아래 메서드는 이 메서드를 상속하는 클래스에 의해 재정의될 수 있다.

public virtual double perimeter()
{
    return x * y;
}


가상 메서드가 호출되면 재정의 함수에 대해 개체의 런타임 형식이 검사됩니다가장 많이 파생되는 클래스의 재정의 멤버가 호출되므로 멤버를 재정의한 파생 클래스가 없을 경우에는 원래 멤버가 호출될 수도 있다.

virtual 한정자는 static, abstract, private 또는 override 한정자와 함께 사용할 수 없으며 일반 메소드는 비 가상 메서드이며  재정의할 수 없다또한 추상 함수(abstract method) virtual 키워드를 사용하지 않지만 자동으로 virtual이 된다.

아래는 가상 속성의 예이다.

가상 속성은 추상 메서드와 비슷하게 작동하지만 선언 및 호출 구문에 차이가 있다.
정적 속성에는 virtual 한정자를 사용할 수 없다.
상속된 가상 속성은 override 한정자를 사용하는 속성 선언을 포함하는 방법을 통해 파생 클래스에서 재정의될 수 있다.

class MyBaseClass
{
    // virtual auto-implemented property. Overrides can only
    // provide specialized behavior if they implement get and set accessors.
    public virtual string Name { get; set; }

    // ordinary virtual property with backing field
    private int num;
    public virtual int Number
    {
        get { return num; }
        set { num = value; }
    }
}


class MyDerivedClass : MyBaseClass
{
    private string name;

   // Override auto-implemented property with ordinary property
   // to provide specialized accessor behavior.
    public override string Name
    {
        get
        {
            return name;
        }
        set
        {
            if (value != String.Empty)
            {
                name = value;
            }
            else
            {
                name = "Unknown";
            }
        }
    }

}

[아래 예제를 실습하자.]

class TestClass
{
    public class Shape
    {
        public const double PI = Math.PI;
        protected double x, y;
        public Shape()
        {
        }
        public Shape(double x, double y)
        {
            this.x = x;
            this.y = y;
        }
 
        public virtual double Area()
        {
            return x * y;
        }
    }
 
    public class Circle : Shape
    {
        public Circle(double r) : base(r, 0)
        {
        }
 
        public override double Area()
        {
            return PI * x * x;
        }
    }
 
    class Sphere : Shape
    {
        public Sphere(double r) : base(r, 0)
        {
        }
 
        public override double Area()
        {
            return 4 * PI * x * x;
        }
    }
 
    class Cylinder : Shape
    {
        public Cylinder(double r, double h) : base(r, h)
        {
        }
 
        public override double Area()
        {
            return 2 * PI * x * x + 2 * PI * x * y;
        }
    }
 
    static void Main()
    {
        double r = 3.0, h = 5.0;
        Shape c = new Circle(r);
        Shape s = new Sphere(r);
        Shape l = new Cylinder(r, h);
        // Display results:
        Console.WriteLine("Area of Circle   = {0:F2}", c.Area());
        Console.WriteLine("Area of Sphere   = {0:F2}", s.Area());
        Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
        }
    }
    
 



 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272244
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111614
53 [평일주간100%환급]Spring,JAVA,JSP,안드로이드,C#닷넷,SQL,튜닝… 오라클자바…03-151406
52 [주말]C#,ASP.NET마스터 오라클자바…01-311520
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-311754
50 [기업100%환급]개발자를위한스프링,마이바티스,하이버네이트(스… 오라클자바…01-311216
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191508
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111341
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031872
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272244
45 [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… 오라클자바…12-191615
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141586
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111614
42 [주말주간]자바&웹,jQUERY,스프링프레임워크 오라클자바…12-091287
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011509
40 [기업100%환급]자바기초&안드로이드개발자과정(Android전액환급… 오라클자바…12-011683
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011158

댓글 없음:

댓글 쓰기